/**
* @author colonel
*队列操作类
* @param <elem>
*/
class myqueue<elem>{
private queuenode<elem> headnode=null;
private queuenode<elem> tailnode=null;
private queuenode<elem> lastnode=null;
/**判断该队列是否为空
* @return 返回true or false
*/
public boolean isempty(){
return headnode==tailnode;
}
/**入队操作
* @param data 节点元素值
*/
public void put(elem data){
queuenode<elem> newnode=new queuenode<elem>(data);
if (headnode==null&&tailnode==null) {
headnode=tailnode=newnode;
//tailnode=headnode.nextnode;
lastnode=tailnode.nextnode;
return;
}
tailnode.nextnode=newnode;
tailnode=newnode;
lastnode=tailnode.nextnode;
//tailnode=tailnode.nextnode;
}
/**出队操作
* @return 返回出队元素
*/
public elem pop(){
if (headnode==lastnode) {
return null;
}
queuenode<elem> tempnode=headnode;
elem statelem=tempnode.data;
headnode=tempnode.nextnode;
return statelem;
}
/**返回队列长度
* @return 长度
*/
public int size(){
if (isempty()) {
return 0;
}
int length=0;
queuenode<elem> temp=headnode;
while (temp!=null) {
length++;
temp=temp.nextnode;
}
return length;
}
}
四、二叉树
1、节点定义
/**树节点定义
* @author colonel
*
*/
class treenode{
public int data;
public treenode leftnode;
public treenode rightnode;
public treenode(int data){
this.data=data;
this.leftnode=null;
this.rightnode=null;
}
}
2、二叉树操作类
/**二叉排序树操作类
* @author colonel
*
*/
class operatetree{
public treenode rootnode;
public operatetree(){
rootnode=null;
}
/**元素插入二叉排序树
* @param data 待插节点数据
*/
public void insert(int data){
treenode newnode=new treenode(data);
if (rootnode==null) {
rootnode=newnode;
}else {
treenode current=rootnode;
treenode parent;
while (true) {
parent=current;
if (data<current.data) {
current=current.leftnode;
if (current==null) {
parent.leftnode=newnode;
return;
}
} else {
current=current.rightnode;
if (current==null) {
parent.rightnode=newnode;
return;
}
}
}
}
}
/**构建二叉排序树
* @param item 元素数组
*/
public void buildtree(int[] item){
for (int i = 0; i < item.length; i++) {
insert(item[i]);
}
}
/**
* 先序遍历二叉树
*/
public void preorder(treenode root){
if (root!=null) {
system.out.println(root.data);
preorder(root.leftnode);
preorder(root.rightnode);
}
}
/**中序遍历
* @param root
*/
public void inorder(treenode root){
if (root!=null) {
inorder(root.leftnode);
system.out.println(root.data);
inorder(root.rightnode);
}
}
/**后序遍历
* @param root
*/
public void afterorder(treenode root){
if (root!=null) {
afterorder(root.leftnode);
afterorder(root.rightnode);
system.out.println(root.data);
}
}
/**
* 层序遍历二叉排序树
*/
public void layertrave(){
if (this.rootnode==null) {
return;
}
queue<treenode> myqueue=new linkedlist<>();
myqueue.add(rootnode);
while (!myqueue.isempty()) {
treenode tempnode=myqueue.poll();
system.out.println(tempnode.data);
if (tempnode.leftnode!=null) {
myqueue.add(tempnode.leftnode);
}
if (tempnode.rightnode!=null) {
myqueue.add(tempnode.rightnode);
}
}
}