首页 > 编程语言 >数据结构与算法之二叉树: LeetCode 107. 二叉树的层序遍历 II (Ts版)

数据结构与算法之二叉树: LeetCode 107. 二叉树的层序遍历 II (Ts版)

时间:2025-01-08 15:01:11浏览次数:3  
标签:node right TreeNode val 层序 Ts 二叉树 null left

二叉树的层序遍历 II

描述

  • 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例 1

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

示例 2

输入:root = [1]
输出:[[1]]

示例 3

输入:root = []
输出:[]

提示

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

Typescript 版算法实现


1 ) 方案1: 广度优先搜索

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */
 
function levelOrderBottom(root: TreeNode | null): number[][] {
    let levelOrder: number[][] = [];
    if (root === null) return levelOrder;
    let queue: TreeNode[] = [root];
    while (queue.length > 0) {
        let level: number[] = [];
        let size = queue.length;
        for (let i = 0; i < size; i++) {
            let node = queue.shift()!;
            level.push(node.val);
            if (node.left !== null) queue.push(node.left);
            if (node.right !== null) queue.push(node.right);
        }
        levelOrder.unshift(level); // Insert at the beginning to reverse order.
    }
    return levelOrder;
}

2 ) 方案2: 广度优先搜索

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function dfs(node: TreeNode | null, level: number, levels: number[][]): void {
    if (node === null) return;
    if (level === levels.length) levels.push([]);
    levels[level].push(node.val);
    dfs(node.left, level + 1, levels);
    dfs(node.right, level + 1, levels);
}

function levelOrderBottom(root: TreeNode | null): number[][] {
    const levels: number[][] = [];
    dfs(root, 0, levels);
    return levels.reverse();
}

标签:node,right,TreeNode,val,层序,Ts,二叉树,null,left
From: https://blog.csdn.net/Tyro_java/article/details/144992608

相关文章

  • 校盈家财务收费管理平台getstudent存在信息泄露漏洞
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • .bootstrapTable
    Bootstrap-table是一款基于Bootstrap的jQuery表格插件,提供了丰富的功能,如分页、排序、搜索、多选等,广泛应用于各种Web项目中。如何使用Bootstrap-table引入必要的文件首先,你需要引入Bootstrap和jQuery的相关文件,然后引入Bootstrap-table的CSS和JS文件。如果......
  • vue3引入ts以及js文件使用案例
    ts:先确保项目正确集成TypeScript添加tsconfig.json文件{"compilerOptions":{"target":"esnext","module":"esnext","strict":true,"jsx":"preserve","importH......
  • Memcached stats slabs 命令
    Memcachedstatsslabs命令Memcachedstatsslabs命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等。语法:statsslabs命令的基本语法格式如下:statsslabs实例statsslabsSTAT1:chunk_size96STAT1:chunks_per_page10922STAT1:total_pages1STAT......
  • FileSystemManager.fstatSync
    StatsFileSystemManager.fstatSync(Objectobject)基础库2.16.1开始支持,低版本需做兼容处理。小程序插件:支持,需要小程序基础库版本不低于2.19.2微信鸿蒙OS版:支持相关文档:文件系统功能描述同步获取文件的状态信息参数Objectobject属性类型默认值必......
  • 2025毕设springboot MBCTS溯源系统论文+源码
    系统程序文件列表开题报告内容研究背景在当今快速发展的食品与农产品行业中,确保产品的安全与品质已成为消费者最为关心的问题之一。随着供应链的不断延长和复杂化,从原材料种植到最终消费品送达消费者手中的每一个环节都可能成为食品安全风险的潜在来源。为了有效应对这一问......
  • 【GreatSQL优化器-09】make_join_query_block
    【GreatSQL优化器-09】make_join_query_block一、make_join_query_block介绍GreatSQL优化器对于多张表join的连接顺序在前面的章节介绍过的best_access_path函数已经执行了,接着就是把where条件进行切割然后推给合适的表。这个过程就是由函数make_join_query_block来执行的。下......
  • 代码随想录:二叉树的递归遍历
    代码随想录:二叉树的递归遍历现在是找借口时间,一开始是期末考试太忙了,后来是过年放假,一晃这么久没写题了,这样不好。,看了一下我现在leetcode才40多道题呢定个目标,三月之前刷完代码随想录,并且把hot100的简单中等题都写了。/***Definitionforabinarytreenode.*structTre......
  • C语言数据结构与算法(二叉树)
    1.二叉树的概念及结构1.1概念一棵二叉树是结点的一个有限集合,该集合:1.或者为空2.由一个根节点加上两棵别称为左子树和右子树的二叉树组成特性:1.二叉树不存在度大于2的结点2.二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树1.2特殊的二叉树满二叉树:每......
  • 【Leetcode_Hot100】二叉树
    二叉树94.二叉树的中序遍历104.二叉树的最大深度226.翻转二叉树101.对称二叉树543.二叉树的直径102.二叉树的层序遍历108.将有序数组转换为二叉搜索树98.验证二叉搜索树230.二叉搜索树中第K小的元素199.二叉树的右视图114.二叉树展开为链表105.从前序与......