国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹: Leetcode 111. 二叉樹的最小深度 (Typescript版)

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹: Leetcode 111. 二叉樹的最小深度 (Typescript版)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

二叉樹的最小深度

  • https://leetcode.cn/problems/minimum-depth-of-binary-tree/

描述

  • 就 給定一個二叉樹,找出其最小深度。

  • 最小深度是從根節(jié)點到最近葉子節(jié)點的最短路徑上的節(jié)點數(shù)量。

  • 說明:葉子節(jié)點是指沒有子節(jié)點的節(jié)點。

示例 1

    3
   / \
  9  20
    /  \
   15   7
輸入:root = [3,9,20,null,null,15,7]
輸出:2

示例 2

輸入:root = [2,null,3,null,4,null,5,null,6]
輸出:5

提示

  • 樹中節(jié)點數(shù)的范圍在 [0, 1 0 5 10^5 105] 內(nèi)
  • -1000 <= Node.val <= 1000

算法實現(xiàn)

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)
 *     }
 * }
 */

function minDepth(root: TreeNode | null): number {
    if(!root) return 0;
    const q: [TreeNode | null, number][] = [[root, 1]]; // 隊列傳遞根節(jié)點 和 層級
    while(q.length) {
        const [n, l] = q.shift(); // 取出隊首元素和層級
        // console.log(n); // 訪問隊首元素
        // 如果遇到了葉子節(jié)點,直接返回層級
        if(!n.left && !n.right) {
            return l;
        }
        n.left && q.push([n.left, l+1]);
        n.right && q.push([n.right,l+1]);
    }
}
  • 思路
    • 求最小深度,考慮使用廣度優(yōu)先遍歷
    • 在廣度優(yōu)先遍歷中,遇到葉子節(jié)點,停止遍歷,返回葉子節(jié)點層級即可
    • 這個算法,效率很高
  • 步驟
    • 廣度優(yōu)先遍歷整棵樹,并記錄每個節(jié)點的層級
    • 遇到葉子節(jié)點,返回節(jié)點層級,并停止遍歷

2 )方案 2文章來源地址http://www.zghlxwxcb.cn/news/detail-457017.html

/**
 * 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 minDepth(root: TreeNode | null): number {
    const queue:TreeNode[]  = []
    let depth: number = 0 // 最小深度
    if(root) {
        queue.push(root)
    }
    while(queue.length) {
        // 獲取一層的節(jié)點數(shù)量
        let size = queue.length
        depth ++
        // 獲取一層的所有節(jié)點 size--
        while(size--) {
            const first = queue.shift() // 隊首出
            // 同一層左側(cè)入隊
            first.left && queue.push(first.left);
            // 同一層右側(cè)入隊
            first.right && queue.push(first.right);
            // 到葉子節(jié)點即可返回
            if(!first.left && !first.right)
                return depth
        }
    }
    return depth
}
  • 這是官方提供的示例,為何用廣度優(yōu)先遍歷?
  • 是因為最快,不需要遍歷到所有的葉子節(jié)點,只需要遍歷到最小深度
  • 最小深度的定義是:只要再沒有孩子節(jié)點,則其就是葉子
/**
 * 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 minDepth(root: TreeNode | null): number {
    // 無節(jié)點情形
    if (!root) return 0;
    // 沒有孩子節(jié)點場景
    if (!root.left && !root.right) return 1
    // 初始化最小值
    let min_depth = Number.MAX_SAFE_INTEGER;
    // 對左子樹進行遍歷
    root.left && (min_depth = Math.min(minDepth(root.left), min_depth));
    // 對右子樹進行遍歷
    root.right && (min_depth = Math.min(minDepth(root.right), min_depth));
    // 當(dāng)前最小值 + 1 并返回
    return min_depth + 1
};
  • 這個其實也是官方示例,只不過官方是python版本,我改成的TS版本
  • 這里用的是遞歸,也就是深度優(yōu)先遍歷來處理的,所有葉子節(jié)點全部遍歷
  • 在這個過程中求最小值,這個版本沒有廣度優(yōu)先遍歷算法合適
  • 所以,此方案不推薦

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹: Leetcode 111. 二叉樹的最小深度 (Typescript版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 11. 數(shù)據(jù)結(jié)構(gòu)之二叉樹

    11. 數(shù)據(jù)結(jié)構(gòu)之二叉樹

    上一節(jié),簡單概述了樹這種數(shù)據(jù)結(jié)構(gòu),以及樹結(jié)構(gòu)向下,具有某些一些特征的樹,比如二叉樹,B樹,B+樹,堆等。其中,二叉樹是一個很重要的模塊。也是在一些技術(shù)面試中,可能會問到的問題。本節(jié),我們就二叉樹,做詳細介紹。 二叉樹是一個 邏輯結(jié)構(gòu) , 底層可以用數(shù)組

    2024年02月07日
    瀏覽(20)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】654、LeetCode最大二叉樹

    【算法與數(shù)據(jù)結(jié)構(gòu)】654、LeetCode最大二叉樹

    所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。 ?? 思路分析 :【算法與數(shù)據(jù)結(jié)構(gòu)】106、LeetCode從中序與后序遍歷序列構(gòu)造二叉樹這兩道題有些類似,相關(guān)代碼可以互相參考,本題明示了要用遞歸來做,那么遞歸三要素不可缺少: 輸入?yún)?shù)和返

    2024年02月09日
    瀏覽(23)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】226、LeetCode翻轉(zhuǎn)二叉樹

    【算法與數(shù)據(jù)結(jié)構(gòu)】226、LeetCode翻轉(zhuǎn)二叉樹

    所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。 ?? 思路分析 :這道題的思路很簡單,本質(zhì)上就是遍歷每一個節(jié)點,然后交換左右節(jié)點。我們可以用前中后遍歷或者是層次遍歷法來做,參考這兩篇文章,【算法與數(shù)據(jù)結(jié)構(gòu)】144、94、145LeetCode二

    2024年02月16日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)之二叉樹(詳細版)

    數(shù)據(jù)結(jié)構(gòu)之二叉樹(詳細版)

    ? ? ? ? 二叉樹作為數(shù)據(jù)結(jié)構(gòu)的一種,尤為重要,下面是對二叉樹的詳細講解。想要了解二叉樹,首先要了解 二叉樹的基本概念,以及創(chuàng)建二叉樹的結(jié)構(gòu),再深層點,遍歷二叉樹的前序中序和后續(xù),其次是層序,后面將會講解如何計算二叉樹的高和葉結(jié)點 等等。 ???????

    2024年02月03日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)之二叉樹簡介

    二叉樹是一種非線性數(shù)據(jù)結(jié)構(gòu),代表“祖先”與“后代”之間的派生關(guān)系,體現(xiàn)了“一分為二”的分治邏輯。與鏈表相似,二叉樹的基本單元是節(jié)點,每個節(jié)點包含值,左子節(jié)點的索引,右子節(jié)點的索引 當(dāng)給定一個二叉樹的節(jié)點時,我們將該節(jié)點的左子節(jié)點及其以下節(jié)點形成

    2024年02月01日
    瀏覽(35)
  • 數(shù)據(jù)結(jié)構(gòu)之二叉樹(Java)

    數(shù)據(jù)結(jié)構(gòu)之二叉樹(Java)

    在這里先說明一下,結(jié)點和節(jié)點其實一樣的,無須關(guān)注這個。 1. 概念:樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n個有限節(jié)點組成一個具有層次關(guān)系的集合。 如上圖所示,把此種數(shù)據(jù)結(jié)構(gòu)稱作樹是因為它看起來像一個倒掛的樹。 ?2. 特點 有一個特殊的節(jié)點,稱為根節(jié)點,它是唯一

    2024年02月07日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)之二叉樹的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)之二叉樹的實現(xiàn)

    目錄 前言 1. 二叉樹的遍歷 1.1二叉樹的前、中、后序遍歷 1.2?層序遍歷 2.二叉樹的實現(xiàn) 2.1 二叉樹的結(jié)構(gòu) 2.2構(gòu)建二叉樹 ?2.2 前序遍歷的實現(xiàn) 2.3 中序遍歷的實現(xiàn) 2.4 后序遍歷的實現(xiàn) 2.5 計算樹的節(jié)點個數(shù) 2.6 計算樹的深度 2.7 計算葉子節(jié)點個數(shù) 2.8 計算樹第k層的節(jié)點數(shù) 2.9 以內(nèi)容

    2023年04月10日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)之二叉樹的性質(zhì)與存儲結(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)之二叉樹的性質(zhì)與存儲結(jié)構(gòu)

    ??數(shù)據(jù)結(jié)構(gòu)是程序設(shè)計的重要基礎(chǔ),它所討論的內(nèi)容和技術(shù)對從事軟件項目的開發(fā)有重要作用。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)要達到的目標是學(xué)會從問題出發(fā),分析和研究計算機加工的數(shù)據(jù)的特性,以便為應(yīng)用所涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及其相應(yīng)的操作方法,為提高利用

    2024年01月21日
    瀏覽(39)
  • 數(shù)據(jù)結(jié)構(gòu)之二叉樹的數(shù)組表示

    若某節(jié)點的索引為 i ,則該節(jié)點的左子節(jié)點的索引為 2i+1 ,右子節(jié)點的索引為 2i+2 給定某節(jié)點,獲取它的左右字節(jié)點,父節(jié)點 獲取前序遍歷,中序遍歷,后序遍歷,層序遍歷

    2024年01月18日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)奇妙旅程之二叉樹初階

    數(shù)據(jù)結(jié)構(gòu)奇妙旅程之二叉樹初階

    ??????? write in front???????? ?????????大家好,我是xiaoxie.希望你看完之后,有不足之處請多多諒解,讓我們一起共同進步????? . ?? ?xiaoxie?????????—CSDN博客 本文由xiaoxie??????????原創(chuàng) CSDN?如需轉(zhuǎn)載還請通知???? 個人主頁:xiaoxie??

    2024年01月19日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包