圖解LeetCode——543. 二叉樹的直徑

一、題目

給你一棵二叉樹的根節(jié)點,返回該樹的 直徑

二叉樹的 直徑 是指樹中任意兩個節(jié)點之間最長路徑的 長度 。這條路徑可能經(jīng)過也可能不經(jīng)過根節(jié)點 root 。

兩節(jié)點之間路徑的 長度 由它們之間邊數(shù)表示。

二、示例

2.1> 示例 1:

輸入】root = [1,2,3,4,5]
輸出】3
解釋】3 ,取路徑 [4,2,1,3] 或 [5,2,1,3] 的長度。

2.2> 示例 2:

輸入】root = [1,2]
輸出】1

提示:

  • 樹中節(jié)點數(shù)目在范圍 [1, 10^4] 內(nèi)
  • -100 <= Node.val <= 100

三、解題思路

根據(jù)題目描述,我們要獲得二叉樹中任意兩個節(jié)點的最大直徑。那么如何確定哪兩個節(jié)點是值得去進(jìn)行計算的?或者那兩個節(jié)點我們應(yīng)該去進(jìn)行計算。以一個3節(jié)點的子樹為例,分為:根節(jié)點(rootNode)、左子節(jié)點(leftNode)和右子節(jié)點(rightNode),那么leftNoderootNode的距離和rootNoderightNode的距離其實沒有必要參與最大直徑的計算,因為leftNoderightNode的距離一定傾向是最大直徑。所以,我們得出一個結(jié)論:

可能的最大直徑 = leftNode到rootNode的距離 + rootNode到rightNode的距離;

那么,因為二叉樹也并不只有3個節(jié)點,如果節(jié)點很多的話,那么這個二叉樹的層級也就會越深,那么下面我們其實如果能找到leftNode到rootNode距離的最大值(或最深路徑)以及找到rootNode到rightNode距離的最大值(或最深路徑),那么相加必然就是本題所要求解的最大直徑了。

那么針對樹形結(jié)構(gòu)的解題,最常用的方式就是遞歸算法了,從葉子節(jié)點開始統(tǒng)計,一直統(tǒng)計到根節(jié)點,并且每次都要進(jìn)行直徑的計算和比較,當(dāng)遍歷到根節(jié)點時,最大直徑也就計算出來了。

以上就是本題的解題思路,為了便于大家更加深入的理解,下面我們以輸入root = [1,2,3,4,5]為例,看一下是如何進(jìn)行最大直徑計算的(圖中省略了根節(jié)點的深度和直徑的計算,大家自行腦補即可),請見下圖所示:

四、代碼實現(xiàn)

class Solution {
    int diameter = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        depth(root);
        return diameter;
    }
    public int depth(TreeNode node) {
        if (node == null) return 0;
        int leftLen = depth(node.left); // node左子樹最大深度
        int rightLen = depth(node.right); // node右子樹最大深度
        diameter = Math.max(diameter, leftLen + rightLen); // 對比直徑
        return Math.max(leftLen, rightLen) + 1; // 獲得最大深度
    }
}
/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */

今天的文章內(nèi)容就這些了:

寫作不易,筆者幾個小時甚至數(shù)天完成的一篇文章,只愿換來您幾秒鐘的 點贊 & 分享 。

更多技術(shù)干貨,歡迎大家關(guān)注公眾號“爪哇繆斯” ~ \(o)/ ~ 「干貨分享,每天更新」

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 思想 二叉樹的核心思想是分治和遞歸,特點是遍歷方式。解題方式常見兩類思路: 遍歷一遍二叉樹尋找答案; 通過分治分解...
    Sisyphus235閱讀 159評論 0 1
  • 給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結(jié)點路徑長度中的最大值。這條路徑可能穿過根結(jié)...
    桐桑入夢閱讀 251評論 0 0
  • 題目描述 給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結(jié)點路徑長度中的最大值。這條路徑可...
    書瓖果fifty閱讀 422評論 0 0
  • 題目 給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結(jié)點路徑長度中的最大值。這條路徑可能穿...
    唐三斤閱讀 90評論 0 0
  • 題目描述 給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結(jié)點路徑長度中的最大值。這條路徑可...
    topshi閱讀 686評論 0 1

友情鏈接更多精彩內(nèi)容