package com.ys;
import java.awt.*;
import java.util.ArrayList;
import java.util.Stack;
public class Demo13 {
//递归版
//前序遍历
public void preTraverse(TreNode node){
System.out.println(node.val);
preTraverse(node.left);
preTraverse(node.right);
}
//后序遍历
public void midTraverse(TreNode node){
preTraverse(node.left);
System.out.println(node.val);
preTraverse(node.right);
}
//后序遍历
public void afterTraverse(TreNode node){
preTraverse(node.left);
preTraverse(node.right);
System.out.println(node.val);
}
//非递归版
public void preT(TreNode node){
Stack<TreNode> stack=new Stack<TreNode>();
if (node==null)return;
stack.push(node);
while (node!=null){
node=stack.pop();
System.out.println(node.val);
if (node.right!=null)stack.push(node.right);
if (node.left!=null)stack.push(node.left);
}
}
//中序遍历
public void midT(TreNode node){
Stack<TreNode> stack=new Stack<TreNode>();
if (node==null)return;
while (!stack.isEmpty()&&node!=null){
if(node!=null){
stack.push(node);
node=node.left;
}else {
node=stack.pop();
System.out.println(node.val);
node=node.right;
}
}
}
//后序遍历
public void afterT(TreNode node){
Stack<TreNode> stack=new Stack<TreNode>();
Stack<TreNode> stack2=new Stack<TreNode>();
if (node==null)return;
stack.push(node);
while (node!=null){
node=stack.pop();
stack2.push(node);
if (node.left!=null)stack.push(node.left);
if (node.right!=null)stack.push(node.right);
}
while (!stack.isEmpty()){
System.out.println(stack.pop().val);
}
}
//层序遍历
public void cengT(TreNode node){
ArrayList<TreNode> a=new ArrayList<TreNode>();
a.add(node);
while (a.size()!=0){
node=a.remove(0);
System.out.println(node.val);
if (node.left!=null)a.add(node.left);
if (node.right!=null)a.add(node.right);
}
}
}