1. 程式人生 > 其它 >104 二叉樹最大深度

104 二叉樹最大深度

技術標籤:二叉樹演算法leetcode資料結構java


01

題目資訊

題目地址:

https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/


給定一個二叉樹,找出其最大深度。二叉樹的深度根節點到最遠葉子節點的最長路徑上的節點數。

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

示例:

給定二叉樹[3,9,20,null,null,15,7],
3
/\
920
/\
157
返回它的最大深度3


02

概述


樹的開篇第一題其實也是比較簡單的,但它的目的是讓我們初步認識樹這樣一個結構。二叉樹每個節點有兩個子節點也就是兩個指標。大概結構如下:

publicclassTreeNode{
//節點內容值
intval;
//兩個指標
TreeNodeleft;
TreeNoderight;
//構造方法
TreeNode(){}
TreeNode(intval){this.val=val;}
TreeNode(intval,TreeNodeleft,TreeNoderight){
this.val=val;
this.left=left;
this.right=right;
}
}


03

解法一:深度優先搜尋(DFS)


遞迴的想法,最大深度 = 1 + Max( L0(left) , L0(right))。而每個子樹再找到它最大的深度。下圖就是這樣一個過程,圖中省略一些東西只畫了一部分理解這樣一個思路就ok

9757f19a-f094-4f15-aff4-d02ec78fb130.gif
publicintmaxDepth(TreeNoderoot){
if(root==null)return0; // 遞迴出口
returnMath.max(this.maxDepth(root.left),this.maxDepth(root.right))+1;
}
088ebbb4-bf28-4f06-b48a-fa5b1df46bce.png


04

解法二:廣度優先搜尋(BFS)


上面是遞迴,這裡是迭代的方式,輸入root節點判斷是否存在存在則深度+1,再判斷下一層節點(輸入1層兩個節點)對一個節點判斷有無子節點,無則出,有則把它的子節點先加進來再出,注意這裡是一個先進先出的關係(排隊)因為是一層一層的遍歷完

c5b3fca9-d0e8-418a-b572-12b81e93527a.gif
publicintmaxDepth(TreeNoderoot)
{
if(root==null)return0;
Queue<TreeNode>queue=newLinkedList<>();
queue.offer(root);
intresult=0;
while(!queue.isEmpty()){
//每層每個節點的遍歷
for(inti=quene.size();i>0;i--){
TreeNodenode=queue.poll();
if(node.left!=null)queue.offer(node.left);
if(node.right!=null)queue.offer(node.right);
}
result++;
}
returnresult;
}
6115542a-1545-4175-a459-d48eb1207d8e.png


05

總結


合集中樹的第一題,總體來說熟悉樹的基本結構體會遍歷的操作


本文分享自微信公眾號 - IT那個小筆記(qq1839646816)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。