题目:

解决方法: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);
}
这篇博客介绍了如何使用宽度优先搜索(BFS)队列和深度优先搜索(DFS)递归来实现二叉树的锯齿形层次遍历。在BFS解决方案中,通过维护层次级数并根据奇偶性反转每一层的节点顺序来实现锯齿形效果。而在DFS解决方案中,递归地遍历左右子树,并在适当层级插入节点。这两种方法都能有效地完成任务。
1947

被折叠的 条评论
为什么被折叠?



