二叉树的锯齿形层次遍历
题目描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
思路分析
由锯齿形层次遍历,可以通过两个栈分别存储每层的节点。代码如下:
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> lists=new ArrayList<>();
if(root==null)return lists;
List<Integer> list=new ArrayList<>();
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
stack1.push(root);
while (!stack1.isEmpty()||!stack2.isEmpty()){
if(!stack1.isEmpty()){
while (!stack1.isEmpty()){
TreeNode pop = stack1.pop();
list.add(pop.val);
if (pop.left!=null){
stack2.push(pop.left);
}
if (pop.right!=null){
stack2.push(pop.right);
}
}
}else {
while (!stack2.isEmpty()){
TreeNode pop = stack2.pop();
list.add(pop.val);
if (pop.left!=null){
stack1.push(pop.left);
}
if (pop.right!=null){
stack1.push(pop.right);
}
}
}
lists.add(list);
list=new ArrayList<>();
}
return lists;
}