递归
/* 先序遍历 */
public void preOrderRecur(Node head) {
if(head==null) return;
System.out.println(head.value);
preOrderRecur(head.left);
preOrderRecur(head.right);
}
/* 中序遍历 */
public void inOrderRecur(Node head) {
if(head==null) return;
preOrderRecur(head.left);
System.out.println(head.value);
preOrderRecur(head.right);
}
/* 后序遍历 */
public void posOrderRecur(Node head) {
if(head==null) return;
preOrderRecur(head.left);
preOrderRecur(head.right);
System.out.println(head.value);
}
非递归
/*先序遍历*/
public void preOrderRecur(Node head) {
Stack<Node> stack = new Stack<>();
stack.push(head);
while(stack!=null){
head = Stack.pop();
System.out.println(head.value);
if(head.right!=null) stack.push(head.right);
if(head.left!=null) stack.push(head.left);
}
}
/*中序遍历*/
public void inOrderRecur(Node head) {
Stack<Node> stack = new Stack<>();
while(!stack.isEmpty || head!=null){
if(head!=null){
stack.push(head);
head = head.left;
}else{
head = stack.pop();
System.out.print(head.value);
head = head.right;
}
}
}
/*后序遍历*/
public void posOrderUnRecur1(Node head) {
System.out.print("pos-order: ");
if (head != null) {
Stack<Node> s1 = new Stack<Node>();
Stack<Node> s2 = new Stack<Node>();
s1.push(head);
while (!s1.isEmpty()) {
head = s1.pop();
s2.push(head);
if (head.left != null) {
s1.push(head.left);
}
if (head.right != null) {
s1.push(head.right);
}
}
while (!s2.isEmpty()) {
System.out.print(s2.pop().value + " ");
}
}
System.out.println();
}