For example:
Given binary tree
{3,9,20,#,#,15,7}, 3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:[ [3], [20,9], [15,7] ]
[Thoughts]:
变形BFS,creat一个boolean 变量tracking order。
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(root==null) return res;
ArrayList<TreeNode> list = new ArrayList<TreeNode>();
list.add(root);
boolean order = true; //add left first, then right;
while(!list.isEmpty()){
ArrayList<TreeNode> temp = new ArrayList<TreeNode>();
List<Integer> intList = new ArrayList<Integer>();
for(int i=list.size()-1; i>=0; i--){//Note: 逆序
TreeNode node = list.get(i);
intList.add(node.val);
if(order){
if(node.left!=null)
temp.add(node.left);
if(node.right!=null)
temp.add(node.right);
}else{
if(node.right!=null)
temp.add(node.right);
if(node.left!=null)
temp.add(node.left);
}
}
res.add(intList);
list = temp;
order = !order;//Note: order每次要取反
}
return res;
}
}
No comments:
Post a Comment