之字型打印二叉树
二叉树层次遍历的变种,我们可以使用两个栈来保存待打印数据即可
public class Offer38 {
public static void main(String[] args) {
TreeNode node = Main.createNode();
cengci(node);
}
public static void cengci(TreeNode root){
if (root==null)return;
//先存树的左边,再存右边
Stack<TreeNode> stack1 = new Stack<>();
//先存树的右边,再存左边
Stack<TreeNode> stack2 = new Stack<>();
int nextLevel = 0;
int toBePrinted = 1;
stack1.push(root);
while (!stack1.isEmpty()||!stack2.isEmpty()){
if(!stack1.isEmpty()&&stack2.isEmpty()){
TreeNode pop = stack1.pop();
System.out.print(pop.value+" ");
toBePrinted--;
if(pop.left!=null){
stack2.push(pop.left);
nextLevel++;
}
if(pop.right!=null){
stack2.push(pop.right);
nextLevel++;
}
}else{
TreeNode pop = stack2.pop();
System.out.print(pop.value+" ");
toBePrinted--;
if(pop.right!=null){
stack1.push(pop.right);
nextLevel++;
}
if(pop.left!=null){
stack1.push(pop.left);
nextLevel++;
}
}
if(toBePrinted==0){
System.out.println();
toBePrinted = nextLevel;
nextLevel=0;
}
}
}
}