按之字形打印二叉树(Java)
题目:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
分析:
使用两个栈实现:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root==null)
return res;
//
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
stack1.add(root);
//true表示在偶数层, 根节点是第0层
boolean flag = true;
while(!stack1.isEmpty() || !stack2.isEmpty()){
res.add(new ArrayList<>());
if(flag==true){
while(!stack1.isEmpty()){
TreeNode cur = stack1.pop();
res.get(res.size()-1).add(cur.val);
if(cur.left!=null)
stack2.push(cur.left);
if(cur.right!=null)
stack2.push(cur.right);
}
flag=false;
}
else{
while(!stack2.isEmpty()){
TreeNode cur = stack2.pop();
res.get(res.size()-1).add(cur.val);
if(cur.right!=null)
stack1.push(cur.right);
if(cur.left!=null)
stack1.push(cur.left);
}
flag=true;
}
}
return res;
}
}