首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >二叉树层序遍历

二叉树层序遍历

作者头像
JavaEdge
发布2021-12-07 11:02:36
发布2021-12-07 11:02:36
24000
代码可运行
举报
文章被收录于专栏:JavaEdgeJavaEdge
运行总次数:0
代码可运行

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

示例:

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

代码语言:javascript
代码运行次数:0
运行
复制
  3
 / \
9  20
  /  \
 15   7

返回其层序遍历结果:

代码语言:javascript
代码运行次数:0
运行
复制
[
  [3],
  [9,20],
  [15,7]
]
代码语言:javascript
代码运行次数:0
运行
复制
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        
    }
}

解法

递归

相同层次的节点归入同一个数组 传入辅助的 level 参数决定层次

代码语言:javascript
代码运行次数:0
运行
复制
package com.javaedge.middle.tree;

import java.util.ArrayList;
import java.util.List;

/**
 * @author apple
 */
public class BinaryTreeLevelOrderTraversal {

    private static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }

    private static List<List<Integer>> levels = new ArrayList<>();

    public static void helper(TreeNode node, int level) {
        // 假设将 root 作为第 0 层
        if (levels.size() == level) {
            // 可得,此时需要新增该层级
            levels.add(new ArrayList<>());
        }
        // 对应层级的节点值list
        levels.get(level).add(node.val);

        // 递归遍历左子树
        if (node.left != null) {
            helper(node.left, level + 1);
        }
        // 递归遍历右子树
        if (node.right != null) {
            helper(node.right, level + 1);
        }
    }

    public static List<List<Integer>> levelOrder(TreeNode root) {
        if (root == null) {
            return levels;
        }
        helper(root, 0);
        return levels;
    }

    public static void main(String[] args) {
        TreeNode node1 = new TreeNode(3);
        TreeNode node2 = new TreeNode(9);
        TreeNode node3 = new TreeNode(20);
        TreeNode node4 = new TreeNode(15);
        TreeNode node5 = new TreeNode(7);
        node1.left = node2;
        node1.right = node3;
        node3.left = node4;
        node3.right = node5;
        System.out.println(levelOrder(node1));
    }
}

时间:O(N),每个节点倍计算一次 空间:O(N),输出包括 n 个节点

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例:
  • 解法
    • 递归
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档