leetcode 543題。原題鏈接
543題:二叉樹的直徑
題目描述
給你一棵二叉樹的根節(jié)點(diǎn),返回該樹的 直徑 。
二叉樹的 直徑 是指樹中任意兩個(gè)節(jié)點(diǎn)之間最長(zhǎng)路徑的 長(zhǎng)度 。這條路徑可能經(jīng)過(guò)也可能不經(jīng)過(guò)根節(jié)點(diǎn) root 。
兩節(jié)點(diǎn)之間路徑的 長(zhǎng)度 由它們之間邊數(shù)表示。
輸入:root = [1,2,3,4,5]
輸出:3
解釋:3 ,取路徑 [4,2,1,3] 或 [5,2,1,3] 的長(zhǎng)度。
示例2:
輸入:root = [1,2]
輸出:1
提示:
樹中節(jié)點(diǎn)數(shù)目在范圍 [1, 104] 內(nèi)
-100 <= Node.val <= 100
解題代碼
思路:
用遞歸方式去解題,遞歸左樹和右樹時(shí),用一個(gè)變量去保存最長(zhǎng)距離,然后每次遞歸時(shí)返回當(dāng)前最左樹和右樹比較下來(lái)的最大值。
1.leetcode 提供的樹結(jié)構(gòu)
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
2.解題代碼
class Solution {
int max=0;
public int diameterOfBinaryTree(TreeNode root) {
process(root);
return max;
}
//遞歸
public int process(TreeNode root){
if(root == null){
return 0;
}
int left = process(root.left);
int right = process(root.right);
//每次去更新最大距離
max = Math.max(max,left + right);
//返回最大長(zhǎng)度進(jìn)行下次遞歸的判斷。
return Math.max(left , right) + 1;
}
}
二叉樹專題
從前序與中序遍歷序列構(gòu)造二叉樹(java)
leetcode二叉樹中的最大路徑和(java)
二叉樹的遞歸–判斷二叉樹是否是滿二叉樹(java實(shí)現(xiàn))文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-459271.html
二叉樹:填充每個(gè)節(jié)點(diǎn)的下一個(gè)右側(cè)節(jié)點(diǎn)指針(java)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-459271.html
到了這里,關(guān)于LeetCode: 二叉樹的直徑(java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!