色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

二叉樹的最小深度

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:代碼隨想錄 ? 作者:代碼隨想錄 ? 2022-04-28 16:27 ? 次閱讀

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

111.二叉樹的最小深度

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

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

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

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

示例:

給定二叉樹[3,9,20,null,null,15,7],

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

返回它的最小深度 2.

思路

看完了這篇104.二叉樹的最大深度,再來看看如何求最小深度。

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

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

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

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

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

遞歸法

來來來,一起遞歸三部曲:

  1. 確定遞歸函數(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ì)寫如下代碼:

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

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

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

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

所以,如果左子樹為空,右子樹不為空,說明最小深度是 1 + 右子樹的深度。

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

代碼如下:

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

遍歷的順序?yàn)楹笮颍ㄗ笥抑校梢钥闯觯?strong>求二叉樹的最小深度和求二叉樹的最大深度的差別主要在于處理左右孩子不為空的邏輯。

整體遞歸代碼如下:

classSolution{
public:
intgetDepth(TreeNode*node){
if(node==NULL)return0;
intleftDepth=getDepth(node->left);//左
intrightDepth=getDepth(node->right);//右
//中
//當(dāng)一個(gè)左子樹為空,右不為空,這時(shí)并不是最低點(diǎn)
if(node->left==NULL&&node->right!=NULL){
return1+rightDepth;
}
//當(dāng)一個(gè)右子樹為空,左不為空,這時(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ì)二叉樹的操作還不熟練,盡量不要直接照著精簡(jiǎn)代碼來學(xué)。

迭代法

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

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

需要注意的是,只有當(dāng)左右孩子都為空的時(shí)候,才說明遍歷的最低點(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í)候,說明是最低點(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)#獲得左子樹的最小高度
ifroot.right:
min_depth=min(self.minDepth(root.right),min_depth)#獲得右子樹的最小高度
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í)候,說明是最低點(diǎn)的一層了,退出
ifnotnode.leftandnotnode.right:
returnres
ifnode.leftisnotNone:
que.append(node.left)
ifnode.rightisnotNone:
que.append(node.right)
res+=1
returnres
--- EOF ---

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    220

    瀏覽量

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

    關(guān)注

    3

    文章

    4338

    瀏覽量

    62761
  • 二叉樹
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    12350

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備之設(shè)備組成和結(jié)構(gòu)

    的name和value。在設(shè)備中,可描述的信息包括:一、CPU的數(shù)量和類別;、內(nèi)存基地址和大小;三、總線和橋;四、外設(shè)連接;五、中斷控制器和中斷使用情況;六、GPIO控制器和GPIO使用情況;七
    發(fā)表于 01-08 08:32

    3D深度感測(cè)的原理和使用極管激光來實(shí)現(xiàn)深度感測(cè)的優(yōu)勢(shì)

    ? 本文介紹了3D深度感測(cè)的原理和使用極管激光來實(shí)現(xiàn)深度感測(cè)的優(yōu)勢(shì)。 世界是三維的。這句話如此容易理解,以至于大多數(shù)人從未懷疑過自己感知世界的方式。但事實(shí)上,人的每只眼睛每次可捕獲一幅平面圖
    的頭像 發(fā)表于 01-07 09:54 ?81次閱讀
    3D<b class='flag-5'>深度</b>感測(cè)的原理和使用<b class='flag-5'>二</b>極管激光來實(shí)現(xiàn)<b class='flag-5'>深度</b>感測(cè)的優(yōu)勢(shì)

    飛凌嵌入式ElfBoard ELF 1板卡-初識(shí)設(shè)備之設(shè)備組成和結(jié)構(gòu)

    的name和value。在設(shè)備中,可描述的信息包括:一、CPU的數(shù)量和類別;、內(nèi)存基地址和大小;三、總線和橋;四、外設(shè)連接;五、中斷控制器和中斷使用情況;六、GPIO控制器和GPIO使用情況;七
    發(fā)表于 01-07 09:16

    MCU最小系統(tǒng)電路設(shè)計(jì)指南

    目錄 一、何為最小系統(tǒng)? 最小系統(tǒng)電路設(shè)計(jì) 1.電源 (1)各種名詞解釋 (2)為什么會(huì)有VDD_1 _2 _3區(qū)分? (3)Mirco USB (4)5v->3.3v濾波電路 (5)電源指示燈
    的頭像 發(fā)表于 12-09 12:38 ?503次閱讀
    MCU<b class='flag-5'>最小</b>系統(tǒng)電路設(shè)計(jì)指南

    GPU深度學(xué)習(xí)應(yīng)用案例

    能力,可以顯著提高圖像識(shí)別模型的訓(xùn)練速度和準(zhǔn)確性。例如,在人臉識(shí)別、自動(dòng)駕駛等領(lǐng)域,GPU被廣泛應(yīng)用于加速深度學(xué)習(xí)模型的訓(xùn)練和推理過程。 、自然語(yǔ)言處理 自然語(yǔ)言處理(NLP)是深度學(xué)習(xí)的另一個(gè)重要應(yīng)用領(lǐng)域。GPU可以加速NL
    的頭像 發(fā)表于 10-27 11:13 ?417次閱讀

    什么是默克爾(Merkle Tree)?如何計(jì)算默克爾根?

    01 默克爾的概念 默克爾(Merkle Tree)是一種特殊的二叉樹,它的每個(gè)節(jié)點(diǎn)都存儲(chǔ)了一個(gè)數(shù)據(jù)塊的哈希值。哈希值是一種可以將任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為固定長(zhǎng)度的字符串的算法,它具有唯一性和不可
    的頭像 發(fā)表于 09-30 18:22 ?1010次閱讀
    什么是默克爾<b class='flag-5'>樹</b>(Merkle Tree)?如何計(jì)算默克爾根?

    指電極上覆蓋敏感材料的阻值計(jì)算

    覆蓋的敏感材料厚度超出指厚度時(shí)計(jì)算電阻,是否可以視作指電極指間電阻多個(gè)周期串聯(lián)后與超出指厚度部分敏感材料電阻并聯(lián)
    發(fā)表于 07-05 14:48

    指MOSFET器件靜電防護(hù)魯棒性提升技巧

    柵極接地NMOS是一種廣泛應(yīng)用的片上ESD器件結(jié)構(gòu),為達(dá)到特定ESD防護(hù)等級(jí),一般會(huì)采用多指版圖形式來減小器件占用的芯片面積。但是,多指柵極接地NMOS在ESD應(yīng)力作用下,各個(gè)指難于做到均勻
    的頭像 發(fā)表于 06-22 00:50 ?553次閱讀
    多<b class='flag-5'>叉</b>指MOSFET器件靜電防護(hù)魯棒性提升技巧

    示波器怎么設(shè)置存儲(chǔ)深度

    存儲(chǔ)深度,也稱為記錄長(zhǎng)度,是指示波器能夠連續(xù)捕獲和存儲(chǔ)的采樣點(diǎn)數(shù)。它決定了示波器能夠捕獲的波形的時(shí)間長(zhǎng)度,以及能夠分辨的最小時(shí)間間隔。
    的頭像 發(fā)表于 05-31 15:42 ?1802次閱讀

    原理圖設(shè)計(jì)里兩顆重要的(國(guó)產(chǎn)EDA)

    原理圖里面兩顆重要的,那就是元件和網(wǎng)絡(luò),作為EDA工具中的重要視圖和概念,雖然看似枯燥,但它們扮演著非常重要的角色,它們?yōu)殡娐穲D的層次化結(jié)構(gòu)提供了有力支撐。想象一個(gè)大型的電路設(shè)計(jì)項(xiàng)目,就像一個(gè)
    的頭像 發(fā)表于 05-29 17:47 ?776次閱讀
    原理圖設(shè)計(jì)里兩顆重要的<b class='flag-5'>樹</b>(國(guó)產(chǎn)EDA)

    圣誕燈電路圖分享

    圣誕裝飾的電路分為兩個(gè)主要部分,即燈光和聲音部分。照明部分由五組 LED 組成,它們以進(jìn)制順序運(yùn)行,每隔幾分鐘就會(huì)重復(fù)一次。在這里,根據(jù)我們的興趣,LED 可以是任何顏色。這件裝飾品可以裝飾您的圣誕以及您的家。
    的頭像 發(fā)表于 05-05 10:12 ?1116次閱讀
    圣誕<b class='flag-5'>樹</b>燈電路圖分享

    迅鐳激光中標(biāo)叉車行業(yè)龍頭杭集團(tuán)!

    中國(guó)制造業(yè)企業(yè)500強(qiáng)、中國(guó)民營(yíng)企業(yè)500強(qiáng)——杭集團(tuán)響應(yīng)號(hào)召,更“新”設(shè)備,引入迅鐳高功率激光切割設(shè)備,建設(shè)智能工廠,向世界展示中國(guó)制造的智慧與力量!
    的頭像 發(fā)表于 04-19 14:47 ?344次閱讀
    迅鐳激光中標(biāo)叉車行業(yè)龍頭杭<b class='flag-5'>叉</b>集團(tuán)!

    華睿科技近期推出新一代堆高式取型AMR FD150

    華睿科技近期推出新一代堆高式取型AMR FD150。FD150基于AMR專用車身設(shè)計(jì),額定負(fù)載1500KG,最大舉升高度2m,滿足最小2.2m通道內(nèi)自主識(shí)別取放貨。
    的頭像 發(fā)表于 03-25 09:46 ?576次閱讀

    哈夫曼編碼怎么算 哈夫曼編碼左邊是0還是1

    二叉樹,將出現(xiàn)頻率高的字符用較短的編碼表示,而出現(xiàn)頻率低的字符則用較長(zhǎng)的編碼表示。通過這種方式,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行高效的編碼和解碼。 下面我們將詳細(xì)介紹哈夫曼編碼的算法過程。 統(tǒng)計(jì)字符頻率 在進(jìn)行哈夫曼編碼前,首先需
    的頭像 發(fā)表于 01-30 11:27 ?3167次閱讀

    MCP251X can驅(qū)動(dòng)移植nuc980采樣用設(shè)備配置時(shí),中斷如何配置設(shè)備?

    MCP251X can驅(qū)動(dòng)移植nuc980 采樣用設(shè)備配置時(shí),中斷如何配置設(shè)備? spi0: spi@b0061000 { status = \"okay\"
    發(fā)表于 01-17 06:43
    主站蜘蛛池模板: 欧洲xxxxx| 国产色播视频在线观看| 国产成人小视频| 久久丫线这里只精品| 涩涩在线视频| 2019午夜福合集不打码| 国产麻豆福利AV在线观看| 奶水四溅54p| 亚洲欧美国产双大乳头| 耻辱诊察室1一4集动漫在线观看| 九九热最新视频| 四房播播开心五月| 7756短视频| 护士日本xx厕所| 乳色吐息在线观看全集免费观看| 1区2区3区4区产品不卡码网站| 国产三级在线观看免费| 人淫阁| 2017必看无码作品| 花蝴蝶免费版高清版| 天天爽夜夜爽| YELLOW视频在线观看最新| 久久久擼擼擼麻豆| 亚洲国产成人精品无码区5566| 处xxxx.88| 欧美另类videosbest| 在线免费观看毛片| 国产一级特黄aa毛片| 色欲AV亚洲午夜精品无码| 99日精品欧美国产| 久久足恋网| 一本久道久久综合狠狠躁AV| 国产精品丰满人妻AV麻豆| 青青草原伊人| 99久视频只有精品2019| 久久午夜夜伦鲁鲁片无码免费| 亚洲久久少妇中文字幕| 国产精品一国产AV麻豆| 色琪琪久久热在线| 超碰人热人人热人人看| 欧美GAY猛男GAYA片18禁|