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

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

以下題解的更詳細(xì)思路來(lái)自于:代碼隨想錄 (programmercarl.com)

前言

二叉樹(shù)的高度與深度

這里先補(bǔ)充一下二叉樹(shù)深度和高度的概念

高度:二叉樹(shù)中任意一個(gè)節(jié)點(diǎn)到葉子結(jié)點(diǎn)的距離

深度:二叉樹(shù)中任意一個(gè)節(jié)點(diǎn)到根節(jié)點(diǎn)的距離

下面給出一個(gè)圖便于理解

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

獲取高度與深度的遍歷方式

高度:后序遍歷

深度:前序遍歷

那么為什么是這兩種方式呢?

高度:(從下往上計(jì)數(shù))后序遍歷可以獲取左右子樹(shù)的高度最后返回給父節(jié)點(diǎn)

深度:(從上往下計(jì)數(shù))往下遍歷一個(gè)我們就加1,也符合求深度的過(guò)程,前序遍歷剛好可以滿(mǎn)足需求

?LeetCode T104 二叉樹(shù)的最大深度

題目鏈接:104. 二叉樹(shù)的最大深度 - 力扣(LeetCode)

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

題目思路:

首先我要說(shuō)的是,這道題雖然是求最大深度,但是前序遍歷和后序遍歷都可以解決問(wèn)題,這里我們選擇使用后序遍歷解決問(wèn)題,有人會(huì)問(wèn),剛剛不是說(shuō)前序遍歷更好解決深度問(wèn)題嗎,為什么使用后序遍歷呢?這是因?yàn)?span style="color:#fe2c24;">最大深度就是二叉樹(shù)的根節(jié)點(diǎn)的高度,?這里我們將最大深度轉(zhuǎn)化為了根節(jié)點(diǎn) 的高度來(lái)求解,我們?nèi)匀徊捎眠f歸去求解,分三步.

1.確定返回值和參數(shù)類(lèi)型

int getHeight(TreeNode node)

2.確定遞歸結(jié)束條件

if(node == null)
    {
        return 0;
    }

3.確定單層遞歸的代碼

        int leftHeight = getHeight(node.left);
        int rightHeight = getHeight(node.right);
        int height = leftHeight>rightHeight?leftHeight+1:rightHeight+1;
        return height;

題目代碼:


class Solution {
    public int maxDepth(TreeNode root) {
        return getHeight(root);

    }
    public int getHeight(TreeNode node)
    {
        if(node == null)
        {
            return 0;
        }
        int leftHeight = getHeight(node.left);
        int rightHeight = getHeight(node.right);
        int height = leftHeight>rightHeight?leftHeight+1:rightHeight+1;
        return height;
    }
}

LeetCode T111 二叉樹(shù)的最小深度

題目鏈接:111. 二叉樹(shù)的最小深度 - 力扣(LeetCode)

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

題目思路:

這題我們也能延續(xù)上題的思想,不過(guò)需要做特殊的處理,我們這里同樣使用后序遍歷來(lái)解決問(wèn)題,但是要注意不是在上題的基礎(chǔ)上把最大值改成最小值即可,因?yàn)檫@里我們是從葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的距離,這里假設(shè)我們左子樹(shù)為空,用上題的求最大深度的思路解決問(wèn)題就會(huì)發(fā)現(xiàn)不成立,如果依據(jù)上題的思路這里的最小深度就為1,而實(shí)際上這題的最小深度是3,這里我們開(kāi)始遞歸三部曲

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

1.確定參數(shù)和返回值

 public int getHeight(TreeNode node)

2.確定遞歸結(jié)束條件

if(node == null)
    {
        return 0;
    }

3.確定單層遞歸邏輯

        int rightHeight = getHeight(node.right);
        int leftHeight = getHeight(node.left);
        if(node.left == null && node.right != null)
        {
            return rightHeight+1;
        }
        if(node.left != null && node.right == null)
        {
            return leftHeight+1;
        }
        return leftHeight>rightHeight?rightHeight+1:leftHeight+1;

這里我們要考慮某個(gè)子樹(shù)為空而另一個(gè)子樹(shù)不為空的情況,我們?nèi)シ祷夭粸榭盏淖訕?shù)+1

題目代碼:

class Solution {
    public int minDepth(TreeNode root) {
        return getHeight(root);

    }
    public int getHeight(TreeNode node)
    {
        if(node == null)
        {
            return 0;
        }
        int rightHeight = getHeight(node.right);
        int leftHeight = getHeight(node.left);
        if(node.left == null && node.right != null)
        {
            return rightHeight+1;
        }
        if(node.left != null && node.right == null)
        {
            return leftHeight+1;
        }
        return leftHeight>rightHeight?rightHeight+1:leftHeight+1;
    }
}

LeetCode T222 完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)

題目鏈接:力扣(LeetCode)官網(wǎng) - 全球極客摯愛(ài)的技術(shù)成長(zhǎng)平臺(tái)

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù),代碼隨想錄,leetcode,算法,職場(chǎng)和發(fā)展

題目思路:

這里我們知道對(duì)于滿(mǎn)二叉樹(shù),我們的節(jié)點(diǎn)數(shù)是2^(深度-1)次方,由此我們可以判斷如果左邊遞歸到底的深度等于右邊遞歸到底的深度,那么就可以使用這個(gè)公式計(jì)算,這樣也減少了對(duì)中間節(jié)點(diǎn)的遍歷.我們繼續(xù)進(jìn)行遞歸三部曲(后序遍歷)

1.返回值和形參列表

public int getNum(TreeNode node)

2.終止條件

        if(node == null)
        {
            return 0;
        }
        int leftDepth=0,rightDepth = 0;
        TreeNode left = node.left;
        TreeNode right = node.right;
        while(right != null)
        {
            right = right.right;
            leftDepth++;
        }
        while(left != null)
        {
            left = left.left;
            leftDepth++;
        }
        if(leftDepth == rightDepth)
        {
            return (2>>leftDepth)-1;
        }

3.一層遞歸邏輯文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718826.html

        int leftnum= getNum(node.left);
        int rightnum = getNum(node.right);
        int result = leftnum + rightnum+1;
        return result;

題目代碼:

class Solution {
    public int countNodes(TreeNode root) {
        return getNum(root);

    }
    public int getNum(TreeNode node)
    {
        //終止條件
        if(node == null)
        {
            return 0;
        }
        int leftDepth=0,rightDepth = 0;
        TreeNode left = node.left;
        TreeNode right = node.right;
        while(right != null)
        {
            right = right.right;
            leftDepth++;
        }
        while(left != null)
        {
            left = left.left;
            leftDepth++;
        }
        if(leftDepth == rightDepth)
        {
            return (2>>leftDepth)-1;
        }
        int leftnum= getNum(node.left);
        int rightnum = getNum(node.right);
        int result = leftnum + rightnum+1;
        return result;

    }
}

到了這里,關(guān)于代碼隨想錄 Day13 二叉樹(shù) LeetCode T104 二叉樹(shù)的最大深度 T111 二叉樹(shù)的最小深度 T222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【代碼隨想錄day21】二叉樹(shù)的最近公共祖先

    【代碼隨想錄day21】二叉樹(shù)的最近公共祖先

    給定一個(gè)二叉樹(shù), 找到該樹(shù)中兩個(gè)指定節(jié)點(diǎn)的最近公共祖先。 百度百科中最近公共祖先的定義為:“對(duì)于有根樹(shù) T 的兩個(gè)節(jié)點(diǎn) p、q,最近公共祖先表示為一個(gè)節(jié)點(diǎn) x,滿(mǎn)足 x 是 p、q 的祖先且 x 的深度盡可能大(一個(gè)節(jié)點(diǎn)也可以是它自己的祖先)。” 這題的難點(diǎn)在于: 如何建

    2024年02月15日
    瀏覽(25)
  • 【代碼隨想錄day19】從前序與中序遍歷序列構(gòu)造二叉樹(shù)

    【代碼隨想錄day19】從前序與中序遍歷序列構(gòu)造二叉樹(shù)

    使用遞歸建樹(shù),流程如下: 取出后序節(jié)點(diǎn)創(chuàng)建新樹(shù)的節(jié)點(diǎn) 找到新樹(shù)的節(jié)點(diǎn)在中序中的索引 分割中序序列 分割后序序列 繼續(xù)遞歸建立整顆新樹(shù)

    2024年02月15日
    瀏覽(24)
  • [代碼隨想錄](méi)二叉樹(shù)

    [代碼隨想錄](méi)二叉樹(shù)

    二叉樹(shù)可以鏈?zhǔn)酱鎯?chǔ),也可以順序存儲(chǔ)。 那么鏈?zhǔn)酱鎯?chǔ)方式就用指針, 順序存儲(chǔ)的方式就是用數(shù)組。 顧名思義就是順序存儲(chǔ)的元素在內(nèi)存是連續(xù)分布的,而鏈?zhǔn)酱鎯?chǔ)則是通過(guò)指針把分布在各個(gè)地址的節(jié)點(diǎn)串聯(lián)一起。 鏈?zhǔn)酱鎯?chǔ)如圖: 鏈?zhǔn)酱鎯?chǔ)是大家很熟悉的一種方式,那么

    2024年02月03日
    瀏覽(25)
  • 代碼隨想錄筆記--二叉樹(shù)篇

    代碼隨想錄筆記--二叉樹(shù)篇

    目錄 1--遞歸遍歷 1-1--前序遍歷 1-2--中序遍歷 1-3--后序遍歷 2--迭代遍歷 2-1--前序遍歷 2-2--后序遍歷 2-3--中序遍歷 3--二叉樹(shù)的層序遍歷 4--翻轉(zhuǎn)二叉樹(shù) 5--對(duì)稱(chēng)二叉樹(shù) 6--二叉樹(shù)最大深度 7--二叉樹(shù)的最小深度 8--完全二叉樹(shù)節(jié)點(diǎn)的數(shù)量 9--平衡二叉樹(shù) 10--二叉樹(shù)的所有路徑 11--左葉子之

    2024年02月10日
    瀏覽(23)
  • 代碼隨想錄 二叉樹(shù) Java(二)

    代碼隨想錄 二叉樹(shù) Java(二)

    采用前序遍歷的方式遍歷該二叉樹(shù),然后統(tǒng)計(jì)該二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù) 這種方式比較簡(jiǎn)單,但是沒(méi)有利用題目中所給的完全二叉樹(shù)這一信息 官方思路:二分查找+位運(yùn)算 對(duì)于任意二叉樹(shù),都可以通過(guò)廣度優(yōu)先搜索或深度優(yōu)先搜索計(jì)算節(jié)點(diǎn)個(gè)數(shù),時(shí)間復(fù)雜度和空間復(fù)雜度都是O(n),

    2024年02月08日
    瀏覽(24)
  • 代碼隨想錄二刷 |二叉樹(shù) | 二叉樹(shù)的右視圖

    代碼隨想錄二刷 |二叉樹(shù) | 二叉樹(shù)的右視圖

    199.二叉樹(shù)的右視圖 給定一個(gè)二叉樹(shù)的 根節(jié)點(diǎn) root,想象自己站在它的右側(cè),按照從頂部到底部的順序,返回從右側(cè)所能看到的節(jié)點(diǎn)值。 示例 1: 輸入: [1,2,3,null,5,null,4] 輸出: [1,3,4] 示例 2: 輸入: [1,null,3] 輸出: [1,3] 示例 3: 輸入: [] 輸出: [] 提示: 二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)的范圍是 [0,1

    2024年02月04日
    瀏覽(96)
  • 跟著《代碼隨想錄刷題》(六)—— 二叉樹(shù)

    跟著《代碼隨想錄刷題》(六)—— 二叉樹(shù)

    LeetCode:114、二叉樹(shù)的前序遍歷 (1)遞歸法 (2)迭代法 (3)統(tǒng)一迭代格式 LeetCode:94、二叉樹(shù)的中序遍歷 (1)遞歸法 (2)迭代法 (3)統(tǒng)一迭代格式 LeetCode:145、二叉樹(shù)的后序遍歷 (1)遞歸法 (2)迭代法 (3)統(tǒng)一迭代格式 LeetCode:589、N叉樹(shù)前序遍歷 LeetCode:590、N叉

    2024年02月09日
    瀏覽(67)
  • 代碼隨想錄二刷day22 |二叉樹(shù)之 235. 二叉搜索樹(shù)的最近公共祖先 701.二叉搜索樹(shù)中的插入操作 450.刪除二叉搜索樹(shù)中的節(jié)點(diǎn)

    235. 二叉搜索樹(shù)的最近公共祖先 題目鏈接 解題思路:討論 中節(jié)點(diǎn) p 中節(jié)點(diǎn) q 或者 中節(jié)點(diǎn) q 中節(jié)點(diǎn) p ,其余的情況的最近公共祖先就是根節(jié)點(diǎn)。 使用遞歸三部曲 確定遞歸函數(shù)返回值以及參數(shù) 參數(shù)就是當(dāng)前節(jié)點(diǎn),以及兩個(gè)結(jié)點(diǎn) p、q。 返回值是要返回最近公共祖先,所以是Tr

    2024年02月08日
    瀏覽(29)
  • 1月3日代碼隨想錄反轉(zhuǎn)二叉樹(shù)

    1月3日代碼隨想錄反轉(zhuǎn)二叉樹(shù)

    給你一棵二叉樹(shù)的根節(jié)點(diǎn)? root ?,翻轉(zhuǎn)這棵二叉樹(shù),并返回其根節(jié)點(diǎn)。 示例 1: 示例 2: 示例 3: 提示: 樹(shù)中節(jié)點(diǎn)數(shù)目范圍在? [0, 100] ?內(nèi) -100 = Node.val = 100 這道題用遞歸的思想就是將根節(jié)點(diǎn)的左右兒子交換,然后再對(duì)子節(jié)點(diǎn)進(jìn)行遞歸操作,直到子節(jié)點(diǎn)均為空。 但是我感覺(jué)

    2024年02月03日
    瀏覽(23)
  • 代碼隨想錄額外題目| 二叉樹(shù) ●129求根到葉數(shù)字之和 ●1382二叉樹(shù)變平衡●100相同的樹(shù)

    #129求根到葉數(shù)字之和 回溯放進(jìn)vector,然后從后往前拿,乘1 10 100 ... 很基礎(chǔ)的回溯 my code: 隨想錄跟我思路差不多,但這兩個(gè)是放globa的:int result; vectorint path; 最近總覺(jué)得global不安全不想放? #1382二叉樹(shù)變平衡 本來(lái)遇到這種會(huì)換root的就頭疼,然后看了眼隨想錄,是要先變成

    2024年02月14日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包