91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:代碼隨想錄 ? 作者:代碼隨想錄 ? 2022-04-28 16:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

和求最大深度一個(gè)套路?

111.二叉樹(shù)的最小深度

題目地址:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/

給定一個(gè)二叉樹(shù),找出其最小深度。

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

說(shuō)明:葉子節(jié)點(diǎn)是指沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)。

示例:

給定二叉樹(shù)[3,9,20,null,null,15,7],

27d8a3d6-c6a8-11ec-bce3-dac502259ad0.png

返回它的最小深度 2.

思路

看完了這篇104.二叉樹(shù)的最大深度,再來(lái)看看如何求最小深度。

直覺(jué)上好像和求最大深度差不多,其實(shí)還是差不少的。

遍歷順序上依然是后序遍歷(因?yàn)橐容^遞歸返回之后的結(jié)果),但在處理中間節(jié)點(diǎn)的邏輯上,最大深度很容易理解,最小深度可有一個(gè)誤區(qū),如圖:

27ed27fc-c6a8-11ec-bce3-dac502259ad0.png

這就重新審題了,題目中說(shuō)的是:最小深度是從根節(jié)點(diǎn)到最近葉子節(jié)點(diǎn)的最短路徑上的節(jié)點(diǎn)數(shù)量。,注意是葉子節(jié)點(diǎn)。

什么是葉子節(jié)點(diǎn),左右孩子都為空的節(jié)點(diǎn)才是葉子節(jié)點(diǎn)!

遞歸法

來(lái)來(lái)來(lái),一起遞歸三部曲:

  1. 確定遞歸函數(shù)的參數(shù)和返回值

參數(shù)為要傳入的二叉樹(shù)根節(jié)點(diǎn),返回的是int類型的深度。

代碼如下:

intgetDepth(TreeNode*node)
  1. 確定終止條件

終止條件也是遇到空節(jié)點(diǎn)返回0,表示當(dāng)前節(jié)點(diǎn)的高度為0。

代碼如下:

if(node==NULL)return0;
  1. 確定單層遞歸的邏輯

這塊和求最大深度可就不一樣了,一些同學(xué)可能會(huì)寫(xiě)如下代碼:

intleftDepth=getDepth(node->left);
intrightDepth=getDepth(node->right);
intresult=1+min(leftDepth,rightDepth);
returnresult;

這個(gè)代碼就犯了此圖中的誤區(qū):

27ed27fc-c6a8-11ec-bce3-dac502259ad0.png

如果這么求的話,沒(méi)有左孩子的分支會(huì)算為最短深度。

所以,如果左子樹(shù)為空,右子樹(shù)不為空,說(shuō)明最小深度是 1 + 右子樹(shù)的深度。

反之,右子樹(shù)為空,左子樹(shù)不為空,最小深度是 1 + 左子樹(shù)的深度。最后如果左右子樹(shù)都不為空,返回左右子樹(shù)深度最小值 + 1 。

代碼如下:

intleftDepth=getDepth(node->left);//左
intrightDepth=getDepth(node->right);//右
//中
//當(dāng)一個(gè)左子樹(shù)為空,右不為空,這時(shí)并不是最低點(diǎn)
if(node->left==NULL&&node->right!=NULL){
return1+rightDepth;
}
//當(dāng)一個(gè)右子樹(shù)為空,左不為空,這時(shí)并不是最低點(diǎn)
if(node->left!=NULL&&node->right==NULL){
return1+leftDepth;
}
intresult=1+min(leftDepth,rightDepth);
returnresult;

遍歷的順序?yàn)楹笮颍ㄗ笥抑校?,可以看出?strong>求二叉樹(shù)的最小深度和求二叉樹(shù)的最大深度的差別主要在于處理左右孩子不為空的邏輯。

整體遞歸代碼如下:

classSolution{
public:
intgetDepth(TreeNode*node){
if(node==NULL)return0;
intleftDepth=getDepth(node->left);//左
intrightDepth=getDepth(node->right);//右
//中
//當(dāng)一個(gè)左子樹(shù)為空,右不為空,這時(shí)并不是最低點(diǎn)
if(node->left==NULL&&node->right!=NULL){
return1+rightDepth;
}
//當(dāng)一個(gè)右子樹(shù)為空,左不為空,這時(shí)并不是最低點(diǎn)
if(node->left!=NULL&&node->right==NULL){
return1+leftDepth;
}
intresult=1+min(leftDepth,rightDepth);
returnresult;
}

intminDepth(TreeNode*root){
returngetDepth(root);
}
};

精簡(jiǎn)之后代碼如下:

classSolution{
public:
intminDepth(TreeNode*root){
if(root==NULL)return0;
if(root->left==NULL&&root->right!=NULL){
return1+minDepth(root->right);
}
if(root->left!=NULL&&root->right==NULL){
return1+minDepth(root->left);
}
return1+min(minDepth(root->left),minDepth(root->right));
}
};

精簡(jiǎn)之后的代碼根本看不出是哪種遍歷方式,所以依然還要強(qiáng)調(diào)一波:如果對(duì)二叉樹(shù)的操作還不熟練,盡量不要直接照著精簡(jiǎn)代碼來(lái)學(xué)。

迭代法

相對(duì)于104.二叉樹(shù)的最大深度,本題還可以使用層序遍歷的方式來(lái)解決,思路是一樣的。

如果對(duì)層序遍歷還不清楚的話,可以看這篇:二叉樹(shù):層序遍歷登場(chǎng)!

需要注意的是,只有當(dāng)左右孩子都為空的時(shí)候,才說(shuō)明遍歷的最低點(diǎn)了。如果其中一個(gè)孩子為空則不是最低點(diǎn)

代碼如下:(詳細(xì)注釋)

classSolution{
public:

intminDepth(TreeNode*root){
if(root==NULL)return0;
intdepth=0;
queueque;
que.push(root);
while(!que.empty()){
intsize=que.size();
depth++;//記錄最小深度
for(inti=0;iif(node->left)que.push(node->left);
if(node->right)que.push(node->right);
if(!node->left&&!node->right){//當(dāng)左右孩子都為空的時(shí)候,說(shuō)明是最低點(diǎn)的一層了,退出
returndepth;
}
}
}
returndepth;
}
};

其他語(yǔ)言版本

Java

classSolution{
/**
*遞歸法,相比求MaxDepth要復(fù)雜點(diǎn)
*因?yàn)樽钚∩疃仁菑母?jié)點(diǎn)到最近**葉子節(jié)點(diǎn)**的最短路徑上的節(jié)點(diǎn)數(shù)量
*/
publicintminDepth(TreeNoderoot){
if(root==null){
return0;
}
intleftDepth=minDepth(root.left);
intrightDepth=minDepth(root.right);
if(root.left==null){
returnrightDepth+1;
}
if(root.right==null){
returnleftDepth+1;
}
//左右結(jié)點(diǎn)都不為null
returnMath.min(leftDepth,rightDepth)+1;
}
}
classSolution{
/**
*迭代法,層序遍歷
*/
publicintminDepth(TreeNoderoot){
if(root==null){
return0;
}
Dequedeque=newLinkedList<>();
deque.offer(root);
intdepth=0;
while(!deque.isEmpty()){
intsize=deque.size();
depth++;
for(inti=0;iif(poll.left==null&&poll.right==null){
//是葉子結(jié)點(diǎn),直接返回depth,因?yàn)閺纳贤卤闅v,所以該值就是最小值
returndepth;
}
if(poll.left!=null){
deque.offer(poll.left);
}
if(poll.right!=null){
deque.offer(poll.right);
}
}
}
returndepth;
}
}

Python

遞歸法:

classSolution:
defminDepth(self,root:TreeNode)->int:
ifnotroot:
return0
ifnotroot.leftandnotroot.right:
return1

min_depth=10**9
ifroot.left:
min_depth=min(self.minDepth(root.left),min_depth)#獲得左子樹(shù)的最小高度
ifroot.right:
min_depth=min(self.minDepth(root.right),min_depth)#獲得右子樹(shù)的最小高度
returnmin_depth+1

迭代法:

classSolution:
defminDepth(self,root:TreeNode)->int:
ifnotroot:
return0
que=deque()
que.append(root)
res=1

whileque:
for_inrange(len(que)):
node=que.popleft()
#當(dāng)左右孩子都為空的時(shí)候,說(shuō)明是最低點(diǎn)的一層了,退出
ifnotnode.leftandnotnode.right:
returnres
ifnode.leftisnotNone:
que.append(node.left)
ifnode.rightisnotNone:
que.append(node.right)
res+=1
returnres
--- EOF ---

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 節(jié)點(diǎn)
    +關(guān)注

    關(guān)注

    0

    文章

    229

    瀏覽量

    25577
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67566
  • 二叉樹(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    12939

原文標(biāo)題:二叉樹(shù)的最小深度!

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    LMH2190:一款高性能四通道時(shí)鐘樹(shù)驅(qū)動(dòng)器的深度剖析

    LMH2190:一款高性能四通道時(shí)鐘樹(shù)驅(qū)動(dòng)器的深度剖析 在當(dāng)今的電子設(shè)備中,時(shí)鐘信號(hào)的穩(wěn)定與準(zhǔn)確傳輸至關(guān)重要。對(duì)于移動(dòng)手機(jī)、PDA和便攜式設(shè)備等應(yīng)用,對(duì)時(shí)鐘驅(qū)動(dòng)器的性能、尺寸和功耗都提出了極高的要求
    的頭像 發(fā)表于 02-09 16:40 ?119次閱讀

    入門(mén)宇樹(shù)機(jī)器人開(kāi)發(fā):從SDK源碼探索到實(shí)戰(zhàn)操作

    樹(shù)機(jī)器人(Unitree)作為全球領(lǐng)先的四足機(jī)器人研發(fā)企業(yè),其推出的unitree_sdk2是面向旗下 Go2、H1、B2 等系列機(jī)器人的第代軟件開(kāi)發(fā)工具包。該 SDK 提供了豐富的接口和示例代碼,支持開(kāi)發(fā)者快速實(shí)現(xiàn)機(jī)器人控制、狀態(tài)獲取、傳感器數(shù)據(jù)處理等功能,是入門(mén)宇
    的頭像 發(fā)表于 02-06 16:43 ?2858次閱讀
    入門(mén)宇<b class='flag-5'>樹(shù)</b>機(jī)器人開(kāi)發(fā):從SDK源碼探索到實(shí)戰(zhàn)操作

    TüV萊茵與杭集團(tuán)達(dá)成戰(zhàn)略合作并頒發(fā)歐盟CE-MD符合性證書(shū)

    日前,國(guó)際獨(dú)立第三方檢測(cè)、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國(guó)萊茵TüV大中華區(qū)(簡(jiǎn)稱"TüV萊茵")與杭集團(tuán)股份有限公司(簡(jiǎn)稱"杭集團(tuán)")簽署了戰(zhàn)略合作協(xié)議,標(biāo)志著雙方
    的頭像 發(fā)表于 01-15 12:18 ?302次閱讀

    無(wú)線傾角傳感器在古樹(shù)監(jiān)測(cè)中的應(yīng)用:以科技守護(hù)活文物的結(jié)構(gòu)安全

    無(wú)線傾角傳感器在古樹(shù)監(jiān)測(cè)中的應(yīng)用:以科技守護(hù)活文物的結(jié)構(gòu)安全
    的頭像 發(fā)表于 01-09 11:38 ?675次閱讀
    無(wú)線傾角傳感器在古<b class='flag-5'>樹(shù)</b>監(jiān)測(cè)中的應(yīng)用:以科技守護(hù)活文物的結(jié)構(gòu)安全

    億緯鋰能與杭集團(tuán)達(dá)成戰(zhàn)略合作

    近日,億緯鋰能與杭集團(tuán)2025年戰(zhàn)略研討會(huì)暨戰(zhàn)略合作協(xié)議簽約儀式在杭州舉行。億緯鋰能副總裁、商用車電池產(chǎn)品線總裁江吉兵博士,億緯鋰能商用車電池產(chǎn)品線國(guó)內(nèi)銷售部總經(jīng)理井振江,杭集團(tuán)董事、副總經(jīng)理兼
    的頭像 發(fā)表于 01-04 18:18 ?1098次閱讀

    C語(yǔ)言的常見(jiàn)算法

    = next; } return prev; } ``` ### 二叉樹(shù)遍歷 (前序) ```c struct TreeNode { int val; struct TreeNode
    發(fā)表于 11-24 08:29

    年薪100萬(wàn)以上模擬芯片專家的技能樹(shù)

    模擬專家的技能樹(shù)圍繞核心電路設(shè)計(jì)能力、工具與流程掌握、行業(yè)特定技術(shù)深度、工程實(shí)踐與管理能力四大維度展開(kāi),具體如下:一、核心電路設(shè)計(jì)與模塊技術(shù)能力1.基礎(chǔ)模擬模塊設(shè)計(jì)功底通用模塊精通:需熟練設(shè)計(jì)深亞
    的頭像 發(fā)表于 11-12 17:42 ?1697次閱讀
    年薪100萬(wàn)以上模擬芯片專家的技能<b class='flag-5'>樹(shù)</b>

    通過(guò)優(yōu)化代碼來(lái)提高M(jìn)CU運(yùn)行效率

    選擇時(shí)間復(fù)雜度低的算法。 根據(jù)訪問(wèn)模式選擇數(shù)據(jù)結(jié)構(gòu)。頻繁查找用哈希表,有序數(shù)據(jù)用二叉樹(shù)等。 查表法:對(duì)于復(fù)雜的數(shù)學(xué)計(jì)算(如sin, log),或者協(xié)議解析,預(yù)先計(jì)算好結(jié)果存于數(shù)組中,用空間換時(shí)間
    發(fā)表于 11-12 08:21

    蜂鳥(niǎo)E203內(nèi)核中斷管理模塊sirv_plic_man代碼分析

    。 上面的代碼生成一個(gè)二叉樹(shù)結(jié)構(gòu)來(lái)比較和選擇具有最大優(yōu)先級(jí)的掛起中斷源及其ID。樹(shù)狀結(jié)構(gòu)由級(jí)聯(lián)比較器組成,每一層的比較器數(shù)量是前一層的一半。在樹(shù)的每一層,選擇優(yōu)先級(jí)最高的中斷并傳遞到下一層,直到只剩下
    發(fā)表于 10-23 06:05

    請(qǐng)問(wèn)rtt studio 的文件夾打紅什么意思?

    rtt studio 的文件夾打紅什么意思?而且文件夾里面實(shí)際是有文件的,但是瀏覽不出來(lái)。
    發(fā)表于 09-18 06:34

    樹(shù)科技,被起訴

    電子發(fā)燒友網(wǎng)綜合報(bào)道 天眼查顯示,近日,杭州宇樹(shù)科技股份有限公司(以下簡(jiǎn)稱“宇樹(shù)科技”)新增1條開(kāi)庭公告,原告為杭州露韋美日化有限公司(以下簡(jiǎn)稱“露韋美日化”),案由為侵害發(fā)明專利權(quán)糾紛,該案將于8
    的頭像 發(fā)表于 08-26 07:50 ?4946次閱讀
    宇<b class='flag-5'>樹(shù)</b>科技,被起訴

    億緯鋰能榮獲杭集團(tuán)2022-2024年度優(yōu)秀供應(yīng)商獎(jiǎng)

    近日,億緯鋰能憑借卓越產(chǎn)品、可靠交付與優(yōu)質(zhì)服務(wù)榮獲杭集團(tuán)頒發(fā)的“2022-2024年度優(yōu)秀供應(yīng)商”獎(jiǎng)。杭集團(tuán)副總經(jīng)理兼杭電器董事長(zhǎng)金華曙、杭電器總經(jīng)理兼杭博電機(jī)總經(jīng)理李明輝出席
    的頭像 發(fā)表于 07-15 09:00 ?1000次閱讀

    看點(diǎn):投資方:宇樹(shù)科技或于科創(chuàng)板IPO 美媒:亞馬遜機(jī)器人數(shù)量接近人類員工 英偉達(dá)股價(jià)創(chuàng)新高

    給大家?guī)?lái)一些行業(yè)資訊: 投資方:宇樹(shù)科技或于科創(chuàng)板IPO 早在2025年的5月29日,宇樹(shù)科技就正式發(fā)布通知稱,因公司發(fā)展需要,杭州宇樹(shù)科技有限公司即日起名稱變更為“杭州宇樹(shù)科技股份
    的頭像 發(fā)表于 07-04 15:08 ?787次閱讀

    存儲(chǔ)示波器的存儲(chǔ)深度對(duì)信號(hào)分析有什么影響?

    測(cè)量結(jié)果波動(dòng)大(如抖動(dòng)測(cè)量誤差±50%)。 案例: 測(cè)量100MHz時(shí)鐘的周期抖動(dòng),存儲(chǔ)深度10kpts → 抖動(dòng)測(cè)量誤差±10ps。 存儲(chǔ)深度升級(jí)至1Mpts → 抖動(dòng)測(cè)量誤差±1ps。 、存儲(chǔ)
    發(fā)表于 05-27 14:39

    白話理解RCC時(shí)鐘樹(shù)(可下載)

    時(shí)鐘就像是單片機(jī)的“心臟”,單片機(jī)正常工作離不開(kāi)時(shí)鐘的支持,下圖是我們單片機(jī)的時(shí)鐘樹(shù) ,它反映了單片機(jī)的時(shí)鐘關(guān)系。我們來(lái)詳細(xì)描述一下時(shí)鐘樹(shù)的工作原理。寄存器上電后有一個(gè)復(fù)位值,大家看我畫(huà)紅線的這個(gè)
    發(fā)表于 03-27 13:50 ?0次下載