LeetCode:二叉树的锯齿形层次遍历【103】
2024-08-29 15:46:52
LeetCode:二叉树的锯齿形层次遍历【103】
题目描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
题目分析
层次遍历,应该很容易想到BFS(宽度优先搜索算法),此处是锯齿形,即一层是从左往右,下一层就是从右往左。
解决办法是每一层都按照从左往右遍历,只是如果是偶数层的话,当遍历完该层后执行一层逆序即可。
这里有一个很好用的集合方法,快速逆序集合:
Collections.reverse(line);
Java题解
package tree; import java.util.*; public class ZigzagLevelOrder_103 {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> line = new ArrayList<>(); if(root == null)
return ans;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root); line.add(root.val);
ans.add(line);
line = new ArrayList<>(); int size = queue.size();
int flag = 1;
while(!queue.isEmpty())
{
TreeNode tmp = queue.poll();
if(tmp.left!=null)
{
queue.add(tmp.left);
line.add(tmp.left.val);
}
if(tmp.right!=null)
{
queue.add(tmp.right);
line.add(tmp.right.val);
} size--;
if(size==0&&line.size()>0)
{
if(flag==1)
{
Collections.reverse(line);
flag=0;
}else
flag=1;
size=queue.size();
ans.add(line);
line = new ArrayList<>();
}
}
return ans;
}
}
最新文章
- python property理解
- Java 开发技巧
- TListView的一些操作
- mvc5入门示例博客(有惊喜)
- maven在windows环境下加载settings.xml文件
- libsqlite3.dylib找不到
- CI 配置验证规则
- tiled工具使用
- 广州Uber优步司机奖励政策(2月1日~2月7日)
- Direct3D 顶点缓存
- 如何成为CSDN博客专家
- selenium之多线程启动grid分布式测试框架封装(四)
- Winform程序
- 浅谈sql优化
- python导入不同目录下模块的方法
- python 爬取腾讯微博并生成词云
- Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
- Django-CRM项目学习(一)-admin组件
- MapReduce编程:数字排序
- 如何在宿主机上执行容器里的jmap,jtack,jstat 命令获取信息(原创)