104 二叉樹最大深度
阿新 • • 發佈:2020-12-28
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
publicintmaxDepth(TreeNoderoot){
if(root==null)return0; // 遞迴出口
returnMath.max(this.maxDepth(root.left),this.maxDepth(root.right))+1;
}
04
解法二:廣度優先搜尋(BFS)
上面是遞迴,這裡是迭代的方式,輸入root節點判斷是否存在存在則深度+1,再判斷下一層節點(輸入1層兩個節點)對一個節點判斷有無子節點,無則出,有則把它的子節點先加進來再出,注意這裡是一個先進先出的關係(排隊)因為是一層一層的遍歷完
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;
}
05
總結
合集中樹的第一題,總體來說熟悉樹的基本結構體會遍歷的操作
本文分享自微信公眾號 - IT那個小筆記(qq1839646816)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。