力扣No.102 二叉树的层次遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例:
二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

这道题有两种解法:递归和遍历

 

递归可以用level和list去存每层的节点,如果这层节点没有相应的list去存,就新建一个list,然后将当前节点存入。如果不为空,则取出当前层数的list,将新节点存入。

List<List<Integer>> levels = new ArrayList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
        //判断传入的节点是否为空
        if (root == null) {
            return levels;
        }
        dfs(root, 0);
        return levels;
    }
    public void dfs(TreeNode root, int level) {
        //判断该层有没有list
        if (level == levels.size()) {
            levels.add(new ArrayList<>());
        }
        //存入节点
        levels.get(level).add(root.val);
        //如果左右子树不为空就存入
        if (root.left != null) {
            dfs(root.left, level + 1);
        }
        if (root.right != null) {
            dfs(root.right, level + 1);
        }

 

posted @ 2020-11-11 15:35  豪哥的博客  阅读(84)  评论(0编辑  收藏  举报