国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

二叉樹的最小深度

算法與數據結構 ? 來源:代碼隨想錄 ? 作者:代碼隨想錄 ? 2022-04-28 16:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

和求最大深度一個套路?

111.二叉樹的最小深度

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

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

最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

說明:葉子節點是指沒有子節點的節點。

示例:

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

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

返回它的最小深度 2.

思路

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

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

遍歷順序上依然是后序遍歷(因為要比較遞歸返回之后的結果),但在處理中間節點的邏輯上,最大深度很容易理解,最小深度可有一個誤區,如圖:

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

這就重新審題了,題目中說的是:最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。,注意是葉子節點

什么是葉子節點,左右孩子都為空的節點才是葉子節點!

遞歸法

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

  1. 確定遞歸函數的參數和返回值

參數為要傳入的二叉樹根節點,返回的是int類型的深度。

代碼如下:

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

終止條件也是遇到空節點返回0,表示當前節點的高度為0。

代碼如下:

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

這塊和求最大深度可就不一樣了,一些同學可能會寫如下代碼:

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

這個代碼就犯了此圖中的誤區:

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

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

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

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

代碼如下:

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

遍歷的順序為后序(左右中),可以看出:求二叉樹的最小深度和求二叉樹的最大深度的差別主要在于處理左右孩子不為空的邏輯。

整體遞歸代碼如下:

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

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

精簡之后代碼如下:

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));
}
};

精簡之后的代碼根本看不出是哪種遍歷方式,所以依然還要強調一波:如果對二叉樹的操作還不熟練,盡量不要直接照著精簡代碼來學。

迭代法

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

如果對層序遍歷還不清楚的話,可以看這篇:二叉樹:層序遍歷登場!

需要注意的是,只有當左右孩子都為空的時候,才說明遍歷的最低點了。如果其中一個孩子為空則不是最低點

代碼如下:(詳細注釋)

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){//當左右孩子都為空的時候,說明是最低點的一層了,退出
returndepth;
}
}
}
returndepth;
}
};

其他語言版本

Java

classSolution{
/**
*遞歸法,相比求MaxDepth要復雜點
*因為最小深度是從根節點到最近**葉子節點**的最短路徑上的節點數量
*/
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;
}
//左右結點都不為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){
//是葉子結點,直接返回depth,因為從上往下遍歷,所以該值就是最小值
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()
#當左右孩子都為空的時候,說明是最低點的一層了,退出
ifnotnode.leftandnotnode.right:
returnres
ifnode.leftisnotNone:
que.append(node.left)
ifnode.rightisnotNone:
que.append(node.right)
res+=1
returnres
--- EOF ---

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 節點
    +關注

    關注

    0

    文章

    229

    瀏覽量

    25571
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67513
  • 二叉樹
    +關注

    關注

    0

    文章

    74

    瀏覽量

    12933

原文標題:二叉樹的最小深度!

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    LMH2190:一款高性能四通道時鐘驅動器的深度剖析

    LMH2190:一款高性能四通道時鐘驅動器的深度剖析 在當今的電子設備中,時鐘信號的穩定與準確傳輸至關重要。對于移動手機、PDA和便攜式設備等應用,對時鐘驅動器的性能、尺寸和功耗都提出了極高的要求
    的頭像 發表于 02-09 16:40 ?107次閱讀

    入門宇機器人開發:從SDK源碼探索到實戰操作

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

    TüV萊茵與杭集團達成戰略合作并頒發歐盟CE-MD符合性證書

    日前,國際獨立第三方檢測、檢驗和認證機構德國萊茵TüV大中華區(簡稱"TüV萊茵")與杭集團股份有限公司(簡稱"杭集團")簽署了戰略合作協議,標志著雙方
    的頭像 發表于 01-15 12:18 ?280次閱讀

    無線傾角傳感器在古監測中的應用:以科技守護活文物的結構安全

    無線傾角傳感器在古監測中的應用:以科技守護活文物的結構安全
    的頭像 發表于 01-09 11:38 ?656次閱讀
    無線傾角傳感器在古<b class='flag-5'>樹</b>監測中的應用:以科技守護活文物的結構安全

    億緯鋰能與杭集團達成戰略合作

    近日,億緯鋰能與杭集團2025年戰略研討會暨戰略合作協議簽約儀式在杭州舉行。億緯鋰能副總裁、商用車電池產品線總裁江吉兵博士,億緯鋰能商用車電池產品線國內銷售部總經理井振江,杭集團董事、副總經理兼
    的頭像 發表于 01-04 18:18 ?1083次閱讀

    C語言的常見算法

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

    年薪100萬以上模擬芯片專家的技能

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

    通過優化代碼來提高MCU運行效率

    選擇時間復雜度低的算法。 根據訪問模式選擇數據結構。頻繁查找用哈希表,有序數據用二叉樹等。 查表法:對于復雜的數學計算(如sin, log),或者協議解析,預先計算好結果存于數組中,用空間換時間
    發表于 11-12 08:21

    蜂鳥E203內核中斷管理模塊sirv_plic_man代碼分析

    。 上面的代碼生成一個二叉樹結構來比較和選擇具有最大優先級的掛起中斷源及其ID。樹狀結構由級聯比較器組成,每一層的比較器數量是前一層的一半。在的每一層,選擇優先級最高的中斷并傳遞到下一層,直到只剩下
    發表于 10-23 06:05

    請問rtt studio 的文件夾打紅什么意思?

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

    科技,被起訴

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

    億緯鋰能榮獲杭集團2022-2024年度優秀供應商獎

    近日,億緯鋰能憑借卓越產品、可靠交付與優質服務榮獲杭集團頒發的“2022-2024年度優秀供應商”獎。杭集團副總經理兼杭電器董事長金華曙、杭電器總經理兼杭博電機總經理李明輝出席
    的頭像 發表于 07-15 09:00 ?984次閱讀

    看點:投資方:宇科技或于科創板IPO 美媒:亞馬遜機器人數量接近人類員工 英偉達股價創新高

    給大家帶來一些行業資訊: 投資方:宇科技或于科創板IPO 早在2025年的5月29日,宇科技就正式發布通知稱,因公司發展需要,杭州宇科技有限公司即日起名稱變更為“杭州宇科技股份
    的頭像 發表于 07-04 15:08 ?781次閱讀

    存儲示波器的存儲深度對信號分析有什么影響?

    測量結果波動大(如抖動測量誤差±50%)。 案例: 測量100MHz時鐘的周期抖動,存儲深度10kpts → 抖動測量誤差±10ps。 存儲深度升級至1Mpts → 抖動測量誤差±1ps。 、存儲
    發表于 05-27 14:39

    白話理解RCC時鐘(可下載)

    時鐘就像是單片機的“心臟”,單片機正常工作離不開時鐘的支持,下圖是我們單片機的時鐘 ,它反映了單片機的時鐘關系。我們來詳細描述一下時鐘的工作原理。寄存器上電后有一個復位值,大家看我畫紅線的這個
    發表于 03-27 13:50 ?0次下載