目录
鉴于找实习那么打脑壳,今天晚上再写一道题吧。。。
题目
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
解题思路
1、按层遍历:递归实现,对于一个节点及其层数(从根节点root和0层开始),如果当前层存完了上一层节点的子节点,则添加下一层;否则把当前层填满,然后对当前节点的子节点递归调用函数。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
// 层容器
List<List<Integer>> levels = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null ){
return levels;
}
// 递归调用,从root和0层开始
helper(root,0);
return levels;
}
// 传参:当前节点node和当前层level
public void helper(TreeNode node, int level) {
// 添加下一层
if (levels.size() == level)
levels.add(new ArrayList<Integer>());
// 向当前层加入当前节点
levels.get(level).add(node.val);
// process child nodes for the next level
if (node.left != null)
helper(node.left, level + 1);
if (node.right != null)
helper(node.right, level + 1);
}
}