【LeetCode】#103二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)
题目描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
Description
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
Example
Given binary tree [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
解法
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root==null)
return res;
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
boolean flag = true;
stack1.push(root);
while(true){
List<Integer> list = new ArrayList<>();
if(flag){
while(!stack1.isEmpty()){
TreeNode temp = stack1.pop();
list.add(temp.val);
TreeNode left = temp.left;
TreeNode right = temp.right;
if(left!=null)
stack2.push(left);
if(right!=null)
stack2.push(right);
}
flag = false;
res.add(list);
}else{
while(!stack2.isEmpty()){
TreeNode temp = stack2.pop();
list.add(temp.val);
TreeNode left = temp.left;
TreeNode right = temp.right;
if(right!=null)
stack1.push(right);
if(left!=null)
stack1.push(left);
}
flag = true;
res.add(list);
}
if(stack1.isEmpty() && stack2.isEmpty())
break;
}
return res;
}
}