小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
leetcode102-二叉树的层序遍历
前文
本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。
题目信息
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 二叉树:[3,9,20,null,null,15,7],
3
复制代码
/
9 20 /
15 7 返回其层序遍历结果:
[ [3], [9,20], [15,7] ]
解题思路分析
解法1
想要解决二叉树层序遍历的问题,首先要弄清楚什么是层序遍历。层序遍历是指二叉树按照层级进行逐步遍历的操作。主要的思路是利用层级性质进行递归。每层进行遍历时,同时对层级进行增加。因此随着数据进行递归,能够获取到相应层级的二叉树数组。进行非空判断后,将节点的值存储对应的数组位置即可。经过遍历也就得到了全部的二叉树节点层序遍历结果,遍历主要采用前序遍历的方式。 代码如下:
public int cnt = 0;
public List<List<Integer>> list = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
int level = cnt;
if(root != null){
if(list.size() < level + 1 || list.get(level) == null){
list.add(new ArrayList<>());
list.get(level).add(root.val);
}
cnt++;
levelOrder(root.left,cnt);
levelOrder(root.right,cnt);
}
return list;
}
public List<List<Integer>> levelOrder(TreeNode root,int value) {
int level = value;
if(root != null){
if(list.size() < level + 1 || list.get(level) == null){
list.add(new ArrayList<>());
}
list.get(level).add(root.val);
value++;
levelOrder(root.left,value);
levelOrder(root.right,value);
}
return list;
}
复制代码
复杂度分析
- 时间复杂度 o(n)
- 空间复杂度 o(n)
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。