103. Binary Tree Zigzag Level Order Traversal
- Total Accepted: 84947
- Total Submissions: 263023
- Difficulty: Medium
- Contributors: Admin
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).
For 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] ]
Subscribe to see which companies asked this question
单纯的层序遍历用的Queue。但是这里,每次先保存的节点,在下一行需要访问时,是后访问。所以考虑用Stack。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
int flag = 0;
List<List<Integer>> res = new ArrayList<>();
Stack<TreeNode> cur = new Stack<TreeNode>();
Stack<TreeNode> next = new Stack<TreeNode>();
List<Integer> tmp = new ArrayList<Integer>();
if(root == null){return res;}
cur.add(root);
while(!cur.isEmpty()){
TreeNode tn = cur.peek();
cur.pop();
tmp.add(tn.val);
if(flag == 0){
if(tn.left!=null){
next.add(tn.left);
}
if(tn.right!=null){
next.add(tn.right);
}
}
if(flag == 1){
if(tn.right!=null){
next.add(tn.right);
}
if(tn.left!=null){
next.add(tn.left);
}
}
if(cur.isEmpty()){
Stack<TreeNode> tmpNode = next;
next = cur;
cur = tmpNode;
res.add(tmp);
flag = 1- flag;
tmp = new ArrayList<Integer>();
}
}
return res;
}
}