import java.util.Stack;
public class MyTree{
public static void main(String[] s){
new MyTree();
}
public MyTree(){
TreeNode root = init();//初始化二叉树并返回根节点
System.out.println("递归先序遍历");
preorder(root);
System.out.println();
System.out.println("递归中序遍历");
inorder(root);
System.out.println();
System.out.println("递归后续遍历");
posorder(root);
System.out.println();
System.out.println("非递归先序遍历");
preorder(root);
System.out.println();
System.out.println("非递归中序遍历");
_inorder(root);
System.out.println();
System.out.println("非递归后续遍历");
_posorder(root);
System.out.println();
}
public void preorder(TreeNode root){//递归二叉树的前序遍历
if(root != null){
System.out.print(root.getValue());//访问节点值
preorder(root.getLeft());
preorder(root.getRight());
}
}
public void _preorder(TreeNode root){//非递归二叉树的前序遍历
Stack<TreeNode> stack = new Stack<TreeNode>();//定义堆栈存储
while(!(root == null && stack.isEmpty())){
System.out.print(root.getValue());//访问节点
if(root != null){//找到当前节点最深的左子树
stack.push(root);//将当前左子树入栈
root = root.getLeft();
}else{//当左子树到底时,开始访问右节点
root = stack.pop();//当前节点出栈
root = root.getRight();//指向右子树
}