题目:
解决方法:BFS队列、DFS递归
1.BFS队列
public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
// write code here
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
if(root==null)
return list;
int level = 0;
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
while(!q.isEmpty()){
int cnt = q.size();
ArrayList<Integer> list0 = new ArrayList<>();
for(int i=0;i<cnt;i++)
{
TreeNode t = q.poll();
list0.add(t.val);
if(t.left!=null)
q.add(t.left);
if(t.right!=null)
q.add(t.right);
}
if(level%2==1)
Collections.reverse(list0);
list.add(list0);
level+=1;
}
return list;
}
2.DFS递归
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
// write code here
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
dfs(res,root,0);
return res;
}
public static void dfs(ArrayList<ArrayList<Integer>> list,TreeNode root,int level){
if(root==null)
return;
if(list.size()==level)
list.add(new ArrayList<>());
if(level%2==1)
list.get(level).add(0,root.val);
else
list.get(level).add(root.val);
dfs(list,root.left,level+1);
dfs(list,root.right,level+1);
}