?歡迎訂閱《leetcode》專欄,每日一題,每天進步?
可以將二叉樹的直徑轉換為:二叉樹的每個節點的左右子樹的高度和的最大值,
——leetcode此題熱評
前言
哈嘍,大家好,我是一條,
糊涂演算法,難得糊涂
Question
543. 二叉樹的直徑
難度:簡單
給定一棵二叉樹,你需要計算它的直徑長度,一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值,這條路徑可能穿過也可能不穿過根結點,
示例 :
回傳 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3],
注意:兩結點之間的路徑長度是以它們之間邊的數目表示,
Solution
還是遞回+深度優先搜索
我們定義一個遞回函式 depth(node) ,函式回傳該節點為根的子樹的深度,先遞回呼叫左兒子和右兒子求得它們為根的子樹的深度 L和 R,則該節點為根的子樹的深度即為max(L,R)+1
遞回搜索每個節點回傳最大值即可,
Code
所有
leetcode代碼已同步至github歡迎
star
/**
* @author yitiaoIT
*/
class Solution {
int maxd=0;
public int diameterOfBinaryTree(TreeNode root) {
depth(root);
return maxd;
}
public int depth(TreeNode node){
if(node==null){
return 0;
}
int Left = depth(node.left);
int Right = depth(node.right);
maxd=Math.max(Left+Right,maxd);//將每個節點最大直徑(左子樹深度+右子樹深度)當前最大值比較并取大者
return Math.max(Left,Right)+1;//回傳節點深度
}
}
Result
復雜度分析
- 時間復雜度:O(N)

🌈尋寶
?今天是堅持刷題更文的第27/100天
?各位的點贊、關注、收藏、評論、訂閱就是一條創作的最大動力
?更多演算法題歡迎關注專欄《leetcode》
為了回饋各位粉絲,禮尚往來,給大家準備了一條多年積累下來的優質資源,包括 學習視頻、面試資料、珍藏電子書等
大家可以先自己找一下獲取方式,尋寶游戲現在開始,
如果實在找不到可以評論區留言或私信我領取,不過一定要先關注哦!不然無法發私信!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293436.html
標籤:其他

