二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)
題目
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點
示例
給定二叉樹:
1 / \ 2 3 / \ 4 5
返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
注意:兩結點之間的路徑長度是以它們之間邊的數目表示。
程式碼
思路:
使用遞迴的方法,用一個全域性變數max
儲存最大距離
(一開始沒寫出來是因為把自己繞進去了,重點就在於,遞迴的時候,更新max
用leftMax+rightMax
,而返回leftMax和rightMax的較大值
)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int max = 0;
public int diameterOfBinaryTree(TreeNode root) {
getMax(root);
return max;
}
public int getMax(TreeNode node){
if(node == null){
return 0;
}
int leftMax = 0;
int rightMax = 0;
if(node.left != null){
leftMax = getMax(node.left);
}
if(node.right != null){
rightMax = getMax(node.right);
}
max = Math.max(leftMax + rightMax, max);
return Math.max(leftMax, rightMax) + 1;
}
}
相關文章
- Java二叉樹排序及任意兩點個節點間的最大距離Java二叉樹排序
- 二叉樹最大距離(直徑)二叉樹
- 二叉樹中相距最遠的兩個節點之間的距離二叉樹
- LeetCode第 543 題:二叉樹的直徑(C++)LeetCode二叉樹C++
- 二叉樹中最遠的兩個結點的距離二叉樹
- leetcode 每日一題 543 二叉樹的直徑 dfs方法LeetCode每日一題二叉樹
- 求二叉樹的給定兩個結點之間的距離二叉樹
- 遞迴求解二叉樹任意一結點的深度遞迴二叉樹
- 二叉樹兩個節點的公共節點二叉樹
- 樹(2)--二叉樹的遍歷(非遞迴)+線索二叉樹二叉樹遞迴
- 二叉樹中兩個節點的最低公共祖先二叉樹
- 二叉樹:距離最近的共同祖先二叉樹
- 二叉樹遞迴練習二叉樹遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- 二叉樹的非遞迴遍歷——java實現二叉樹遞迴Java
- 387,二叉樹中的最大路徑和二叉樹
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹非遞迴遍歷二叉樹遞迴
- 到達二叉樹目標節點的完整路徑二叉樹
- [java] 二叉樹的後序遍歷(遞迴與非遞迴實現)Java二叉樹遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- 008,二叉樹的下一個節點二叉樹
- 快速求完全二叉樹的節點個數二叉樹
- Leetcode 題解系列 -- 對稱二叉樹(遞迴)LeetCode二叉樹遞迴
- 二叉樹建立後,如何使用遞迴和棧遍歷二叉樹?二叉樹遞迴
- 【C++】翻轉二叉樹(遞迴、非遞迴)C++二叉樹遞迴
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- 如何計算二叉樹中葉節點的數量 - Java迭代和遞迴演算法二叉樹Java遞迴演算法
- LeetCode-222-完全二叉樹的節點個數LeetCode二叉樹
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 二叉樹的非遞迴遍歷寫法二叉樹遞迴
- 二叉平衡樹 python 列表 遞迴Python遞迴
- Day16 | 104.二叉樹的最大深度 、111.二叉樹的最小深度 、222.完全二叉樹的節點個數二叉樹
- LintCode 二叉樹中的最大路徑和二叉樹
- LeetCode 124. 二叉樹中的最大路徑和 | PythonLeetCode二叉樹Python
- LeetCode 104.二叉樹的最大深度LeetCode二叉樹
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴