层次遍历--按照之字形分层打印
解题思路:
实现方式:两个栈+一个标记,标记切换两个栈,一个栈是先放左节点,再放右节点。另一个栈是先放右结点,在放左节点。
public static void main(String[] args) {
TreeNode treeNode1=new TreeNode(1);
TreeNode treeNode2=new TreeNode(2);
TreeNode treeNode3=new TreeNode(3);
TreeNode treeNode4=new TreeNode(4);
TreeNode treeNode5=new TreeNode(5);
TreeNode treeNode6=new TreeNode(6);
TreeNode treeNode7=new TreeNode(7);
treeNode1.left=treeNode2;
treeNode1.right=treeNode3;
treeNode2.left=treeNode4;
treeNode2.right=treeNode5;
treeNode3.left=treeNode6;
treeNode3.right=treeNode7;
printTreeNode(treeNode1);
}
public static void printTreeNode(TreeNode root){
boolean flag=true;
Stack<TreeNode> stack1=new Stack<>();
Stack<TreeNode> stack2=new Stack<>();
stack1.add(root);
while(!stack1.isEmpty() || !stack2.isEmpty()){
if(flag){
TreeNode peek = stack1.peek();
System.out.print(peek.val+" ");
stack1.pop();
if(peek.left!=null){
stack2.push(peek.left);
}
if(peek.right!=null){
stack2.push(peek.right);
}
}else{
TreeNode peek = stack2.peek();
System.out.print(peek.val+" ");
stack2.pop();
if(peek.right!=null){
stack1.push(peek.right);
}
if(peek.left!=null){
stack1.push(peek.left);
}
}
if(flag){
if(stack1.empty()){
System.out.println();
flag=!flag;
}
}else{
if(stack2.empty()){
System.out.println();
flag=!flag;
}
}
}
}