chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

二叉樹的最大深度

算法與數(shù)據(jù)結構 ? 來源:代碼隨想錄 ? 作者:代碼隨想錄 ? 2022-07-26 11:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

盡管之前你可能做過這道題目,但只要認真看完,相信你會收獲滿滿!可以一起解決如下兩道題目:

  • 104.二叉樹的最大深度
  • 559.n叉樹的最大深度

104.二叉樹的最大深度

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

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

二叉樹的深度為根節(jié)點到最遠葉子節(jié)點的最長路徑上的節(jié)點數(shù)。

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

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

7b9b835a-0c92-11ed-ba43-dac502259ad0.png

返回它的最大深度 3 。

遞歸法

本題可以使用前序(中左右),也可以使用后序遍歷(左右中),使用前序求的就是深度,使用后序求的是高度。

而根節(jié)點的高度就是二叉樹的最大深度,所以本題中我們通過后序求的根節(jié)點高度來求的二叉樹最大深度。

這一點其實是很多同學沒有想清楚的,很多題解同樣沒有講清楚。

我先用后序遍歷(左右中)來計算樹的高度。

  1. 確定遞歸函數(shù)的參數(shù)和返回值:參數(shù)就是傳入樹的根節(jié)點,返回就返回這棵樹的深度,所以返回值為int類型。

代碼如下:

intgetdepth(treenode*node)
  1. 確定終止條件:如果為空節(jié)點的話,就返回0,表示高度為0。

代碼如下:

if(node==null)return0;
  1. 確定單層遞歸的邏輯:先求它的左子樹的深度,再求的右子樹的深度,最后取左右深度最大的數(shù)值 再+1 (加1是因為算上當前中間節(jié)點)就是目前節(jié)點為根節(jié)點的樹的深度。

代碼如下:

intleftdepth=getdepth(node->left);//左
intrightdepth=getdepth(node->right);//右
intdepth=1+max(leftdepth,rightdepth);//中
returndepth;

所以整體c++代碼如下:

classsolution{
public:
intgetdepth(treenode*node){
if(node==null)return0;
intleftdepth=getdepth(node->left);//左
intrightdepth=getdepth(node->right);//右
intdepth=1+max(leftdepth,rightdepth);//中
returndepth;
}
intmaxdepth(treenode*root){
returngetdepth(root);
}
};

代碼精簡之后c++代碼如下:

classsolution{
public:
intmaxdepth(treenode*root){
if(root==null)return0;
return1+max(maxdepth(root->left),maxdepth(root->right));
}
};

精簡之后的代碼根本看不出是哪種遍歷方式,也看不出遞歸三部曲的步驟,所以如果對二叉樹的操作還不熟練,盡量不要直接照著精簡代碼來學。

本題當然也可以使用前序,代碼如下:(充分表現(xiàn)出求深度回溯的過程)

classsolution{
public:
intresult;
voidgetdepth(treenode*node,intdepth){
result=depth>result?depth:result;//中

if(node->left==null&&node->right==null)return;

if(node->left){//左
depth++;//深度+1
getdepth(node->left,depth);
depth--;//回溯,深度-1
}
if(node->right){//右
depth++;//深度+1
getdepth(node->right,depth);
depth--;//回溯,深度-1
}
return;
}
intmaxdepth(treenode*root){
result=0;
if(root==0)returnresult;
getdepth(root,1);
returnresult;
}
};

可以看出使用了前序(中左右)的遍歷順序,這才是真正求深度的邏輯!

注意以上代碼是為了把細節(jié)體現(xiàn)出來,簡化一下代碼如下:

classsolution{
public:
intresult;
voidgetdepth(treenode*node,intdepth){
result=depth>result?depth:result;//中
if(node->left==null&&node->right==null)return;
if(node->left){//左
getdepth(node->left,depth+1);
}
if(node->right){//右
getdepth(node->right,depth+1);
}
return;
}
intmaxdepth(treenode*root){
result=0;
if(root==0)returnresult;
getdepth(root,1);
returnresult;
}
};

迭代法

使用迭代法的話,使用層序遍歷是最為合適的,因為最大的深度就是二叉樹的層數(shù),和層序遍歷的方式極其吻合。

在二叉樹中,一層一層的來遍歷二叉樹,記錄一下遍歷的層數(shù)就是二叉樹的深度,如圖所示:

7bb59e02-0c92-11ed-ba43-dac502259ad0.png

所以這道題的迭代法就是一道模板題,可以使用二叉樹層序遍歷的模板來解決的。

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

c++代碼如下:

classsolution{
public:
intmaxdepth(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);
}
}
returndepth;
}
};

那么我們可以順便解決一下n叉樹的最大深度問題

559.n叉樹的最大深度

題目地址:https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/

給定一個 n 叉樹,找到其最大深度。

最大深度是指從根節(jié)點到最遠葉子節(jié)點的最長路徑上的節(jié)點總數(shù)。

例如,給定一個 3叉樹 :

7bc4f44c-0c92-11ed-ba43-dac502259ad0.png

我們應返回其最大深度,3。

思路:

依然可以提供遞歸法和迭代法,來解決這個問題,思路是和二叉樹思路一樣的,直接給出代碼如下:

遞歸法

c++代碼:

classsolution{
public:
intmaxdepth(node*root){
if(root==0)return0;
intdepth=0;
for(inti=0;ichildren.size();i++){
depth=max(depth,maxdepth(root->children[i]));
}
returndepth+1;
}
};

迭代法

依然是層序遍歷,代碼如下:

classsolution{
public:
intmaxdepth(node*root){
queueque;
if(root!=null)que.push(root);
intdepth=0;
while(!que.empty()){
intsize=que.size();
depth++;//記錄深度
for(inti=0;ifor(intj=0;jchildren.size();j++){
if(node->children[j])que.push(node->children[j]);
}
}
}
returndepth;
}
};

其他語言版本

java

104.二叉樹的最大深度

classsolution{
/**
*遞歸法
*/
publicintmaxdepth(treenoderoot){
if(root==null){
return0;
}
intleftdepth=maxdepth(root.left);
intrightdepth=maxdepth(root.right);
returnmath.max(leftdepth,rightdepth)+1;

}
}
classsolution{
/**
*迭代法,使用層序遍歷
*/
publicintmaxdepth(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){
deque.offer(poll.left);
}
if(poll.right!=null){
deque.offer(poll.right);
}
}
}
returndepth;
}
}

python

104.二叉樹的最大深度

遞歸法:

classsolution:
defmaxdepth(self,root:treenode)->int:
returnself.getdepth(root)

defgetdepth(self,node):
ifnotnode:
return0
leftdepth=self.getdepth(node.left)#左
rightdepth=self.getdepth(node.right)#右
depth=1+max(leftdepth,rightdepth)#中
returndepth

遞歸法:精簡代碼

classsolution:
defmaxdepth(self,root:treenode)->int:
ifnotroot:
return0
return1+max(self.maxdepth(root.left),self.maxdepth(root.right))

迭代法:

importcollections
classsolution:
defmaxdepth(self,root:treenode)->int:
ifnotroot:
return0
depth=0#記錄深度
queue=collections.deque()
queue.append(root)
whilequeue:
size=len(queue)
depth+=1
foriinrange(size):
node=queue.popleft()
ifnode.left:
queue.append(node.left)
ifnode.right:
queue.append(node.right)
returndepth

559.n叉樹的最大深度

遞歸法:

classsolution:
defmaxdepth(self,root:'node')->int:
ifnotroot:
return0
depth=0
foriinrange(len(root.children)):
depth=max(depth,self.maxdepth(root.children[i]))
returndepth+1

迭代法:

importcollections
classsolution:
defmaxdepth(self,root:'node')->int:
queue=collections.deque()
ifroot:
queue.append(root)
depth=0#記錄深度
whilequeue:
size=len(queue)
depth+=1
foriinrange(size):
node=queue.popleft()
forjinrange(len(node.children)):
ifnode.children[j]:
queue.append(node.children[j])
returndepth

使用棧來模擬后序遍歷依然可以

classsolution:
defmaxdepth(self,root:'node')->int:
st=[]
ifroot:
st.append(root)
depth=0
result=0
whilest:
node=st.pop()
ifnode!=none:
st.append(node)#中
st.append(none)
depth+=1
foriinrange(len(node.children)):#處理孩子
ifnode.children[i]:
st.append(node.children[i])

else:
node=st.pop()
depth-=1
result=max(result,depth)
returnresult

審核編輯 :李倩


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

    關注

    22

    文章

    2122

    瀏覽量

    76870
  • 代碼
    +關注

    關注

    30

    文章

    4955

    瀏覽量

    73490
  • 二叉樹
    +關注

    關注

    0

    文章

    74

    瀏覽量

    12892

原文標題:看看這些樹的最大深度!

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

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

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

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

    通過優(yōu)化代碼來提高MCU運行效率

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

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

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

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

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

    科技,被起訴

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

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

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

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

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

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

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

    機器人看點:宇科技王興興回上海母校 加速商業(yè)化落地 宇機器人手租賃火爆

    給大家?guī)硪恍C器人的消息: 宇科技王興興回上海母校 加速商業(yè)化落地 日前,宇科技創(chuàng)始人王興興在接受媒體專訪時候,介紹了公司的H1人形機器人的技術亮點及行業(yè)前景,H1人形機器人是首款能原地后翻出
    的頭像 發(fā)表于 02-25 11:26 ?1879次閱讀

    【技術分享】迅為RK3568開發(fā)板使用TFTP加載內核設備

    【技術分享】迅為RK3568開發(fā)板使用TFTP加載內核設備
    的頭像 發(fā)表于 02-21 14:04 ?1241次閱讀
    【技術分享】迅為RK3568開發(fā)板使用TFTP加載內核設備<b class='flag-5'>樹</b>

    求解答,設備問題

    請問,rk3588j要再提取一個USB3.0接口設備怎么改
    發(fā)表于 02-20 11:22

    科技在物聯(lián)網(wǎng)方面

    。 人工智能算法優(yōu)化:宇科技不斷優(yōu)化其機器人的人工智能算法,使其能夠在物聯(lián)網(wǎng)環(huán)境中更好地進行智能決策。通過機器學習、深度學習等技術,機器人可以從大量的數(shù)據(jù)中學習和提取知識,不斷提高自身的感知、認知和決策
    發(fā)表于 02-04 06:48