leetcode 每日一題 543 二叉樹的直徑 dfs方法
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。
這裡最長直徑的邊一定都是葉子結點,用深度遍歷整個樹。一般思路是找出節點左邊的最大長度和右邊的最大長度加起來可能就是最大直徑,這裡就只需要返回 max(right,left)。但是因為最長直徑可能不過根節點,所以這裡多加一個判斷條件,如果當前節點的左子樹最大長度和右子樹最大長度之和大於當前最大長度就更新一下。
class Solution {
int max = 0;
public int diameterOfBinaryTree(TreeNode root) {
if(root==null)return 0;
dfs(root);
return max-2; //葉子結點處多加了1,兩個頂點就多加了2
}
public int dfs(TreeNode node){
if(node==null)return 0;
int left = bfs(node.left)+1;
int right = bfs(node.right)+1;
if(left+right>max)max=left+right;
return Math.max(left,right);
}
}
相關文章
- LeetCode第 543 題:二叉樹的直徑(C++)LeetCode二叉樹C++
- 【模板題】 543. 二叉樹的直徑二叉樹
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- 求樹的直徑(BFS/DFS)
- leetcode 每日一題 617 合併二叉樹LeetCode每日一題二叉樹
- LeetCode每日一題:二叉樹的最大深度(No.104)LeetCode每日一題二叉樹
- LeetCode每日一題: 翻轉二叉樹(No.226)LeetCode每日一題二叉樹
- 每日一道演算法題--leetcode 124--二叉樹中的最大路徑和--python演算法LeetCode二叉樹Python
- [每日一題] 第八題:二叉樹的深度每日一題二叉樹
- [每日一題] 第三題:二叉樹的深度每日一題二叉樹
- dfs 驗證搜尋二叉樹——leetcode98二叉樹LeetCode
- 樹的直徑
- LeetCode每日一題: 路徑總和(No.112)LeetCode每日一題
- 【js】Leetcode每日一題-葉子相似的樹JSLeetCode每日一題
- [每日一題] 第二十五題:二叉樹的映象每日一題二叉樹
- LeetCode每日一題: N叉樹的最大深度(No.559)LeetCode每日一題
- 【LeetCode擊敗99%+】二叉樹路徑總和LeetCode二叉樹
- LeetCode 124. 二叉樹中的最大路徑和 | PythonLeetCode二叉樹Python
- leetcode每日一題LeetCode每日一題
- 每日一練(27):二叉樹的深度二叉樹
- DFS在二叉樹上的表現二叉樹
- 每日一練(28):平衡二叉樹二叉樹
- 每日一練(16):對稱的二叉樹二叉樹
- Leetcode每日一題(1)LeetCode每日一題
- 面試題34:二叉樹中和為某一值的路徑面試題二叉樹
- 力扣(LeetCode)543力扣LeetCode
- 【每日一題】二叉樹的前中後序非遞迴整理每日一題二叉樹遞迴
- LeetCode題144. 二叉樹的前序遍歷LeetCode二叉樹
- D48 樹的直徑 P3304 [SDOI2013] 直徑
- LeetCode題解(Offer26):判斷二叉樹A是否為二叉樹B的子樹(Python)LeetCode二叉樹Python
- 【Leetcode每日一題】327. 區間和的個數(線段樹/樹狀陣列)LeetCode每日一題陣列
- 【Leetcode千題】617. 合併二叉樹LeetCode二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 演算法筆記 - 樹的直徑演算法筆記
- 每日一道演算法題--leetcode 112--路徑總和--python演算法LeetCodePython
- Day4 樹的直徑、重心以及基環樹
- leetcode 刷題視訊(5) - 二叉樹與圖LeetCode二叉樹
- Leetcode 題解系列 -- 對稱二叉樹(遞迴)LeetCode二叉樹遞迴