递归遍历:
public void preOrder() {
// TODO Auto-generated method stub
System.out.print("先根次序遍历二叉树:");
preOrder(root);
System.out.println();
}
public void preOrder(BinaryNode<T> p) {
if (p != null) {
System.out.print(p.data.toString() + " ");
preOrder(p.left);
preOrder(p.right);
}
}
@Override
public void inOrder() {
// TODO Auto-generated method stub
System.out.print("中根次序遍历二叉树:");
inOrder(root);
System.out.println();
}
public void inOrder(BinaryNode<T> p) {
if (p != null) {
inOrder(p.left);
System.out.print(p.data.toString() + " ");
inOrder(p.right);
}
}
@Override
public void postOrder() {
// TODO Auto-generated method stub
System.out.print("后根次序遍历二叉树:");
postOrder(root);
System.out.println();
}
public void postOrder(BinaryNode<T> p) {
if (p != null) {
postOrder(p.left);
postOrder(p.right);
System.out.print(p.data.toString() + " ");
}
}
非递归遍历
public void inOrderTraverse() {
System.out.println("中根次序遍历(非递归):");
Stack<BinaryNode<T>> stack = new Stack<BinaryNode<T>>();
BinaryNode<T> p = this.root;
while (p != null || !stack.isEmpty()) {
if (p != null) {
stack.push(p);
p = p.left;
} else {
p = stack.pop();
System.out.println(p.data + " ");
p = p.right;
}
}
}
public void preOrderTaverse() {
System.out.println("先根次序遍历(非递归):");
Stack<BinaryNode<T>> stack = new Stack<BinaryNode<T>>();
BinaryNode<T> p = this.root;
while (p != null || !stack.isEmpty()) {
if (p != null) {
System.out.println(p.data + " ");
stack.push(p);
p = p.left;
} else {
p = stack.pop();
p = p.right;
}
}
}
public void postOrderTaverse() {
System.out.println("后根次序遍历(非递归):");
Stack<BinaryNode<T>> stack = new Stack<BinaryNode<T>>();
BinaryNode<T> p = this.root;
BinaryNode<T> q = null;
while (p != null || !stack.isEmpty()) {
// 所有的左子结点相继入栈,除了最后一个
while (p.left != null) {
stack.push(p);
p = p.left;
}
// 当前节点无右子结点或右子结点已经输出,就输出当前节点
while (p.right == null || p.right == q) {
System.out.print(p.data + " ");
q = p;
if (stack.isEmpty())
return;
p = stack.pop();
}
// 处理右子结点
stack.push(p);
p = p.right;
}