1.创建链式二叉树结点Node
/**
* 链式二叉树结点
* @author Administrator
*/
public class Node {
/**
* 结点值
*/
private Object value;
/**
* 左子树
*/
private Node leftChild;
/**
* 右子树
*/
private Node rightChild;
@Override
public String toString() {
return "Node{" +
"value=" + value +
", leftChild=" + leftChild +
", rightChild=" + rightChild +
'}';
}
public Node(Object value) {
this.value = value;
}
public Node(Object value, Node leftChild, Node rightChild) {
this.value = value;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
}
2.创建BinaryTree二叉树接口
/**
* 二叉树接口
* 可以有不同的实现类,每个类可以使用不同的存储结构
* 比如:顺序结构,链式结构
* @author Administrator
*/
public interface BinaryTree {
/**
* 是否空树
* @return
*/
boolean isEmpty();
/**
* 树结点数量
* @return
*/
int size();
/**
* 获取二叉树的高度
* @return
*/
int getHeight();
/**
* 查找指定值的结点
* @param value
* @return
*/
Node findKey(Object value);
/**
* 先序递归遍历
*/
void preOrderTraverse();
/**
* 中序递归遍历
*/
void inOrderTraverse();
/**
* 后序递归遍历
*/
void postOrderTraverse();
/**
* 先序非递归遍历(借助栈)
*/
void preOrderByStack();
/**
* 中序非递归遍历(借助栈)
*/
void inOrderByStack();
/**
* 后序非递归遍历(借助栈)
*/
void postOrderByStack();
/**
* 按照层次遍历二叉树(借助队列)
*/
void levelOrderByStack();
}
3.实现LinkedBinaryTree二叉树
/**
* 链式
* @author Administrator
*/
public class LinkedBinaryTree implements BinaryTree {
/**
* 根结点
*/
private Node root;
/**
* 是否空树
*
* @return
*/
@Override
public boolean isEmpty() {
return root==null;
}
/**
* 树结点数量
* @return
*/
@Override
public int size() {
System.out.print("二叉树结点的个数是:");
return thi