543二叉樹的直徑

2021-10-02 18:22:37 字數 841 閱讀 4677

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。

示例 :

給定二叉樹1/

2 3/ \

4 5返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。

注意:兩結點之間的路徑長度是以它們之間邊的數目表示。

最開始思路正確找子樹的高度和的max,但坑人之處在於,最長的路徑不一定必須要經過根節點。所以要對從root開始的每乙個點遍歷,找到左右子樹的高度和的max。

private

int max = integer.min_value;

/** * 對每乙個點都要遍歷

** @param root

* @return

*/public

intdiameterofbinarytree

(treenode root)

getdepth

(root)

;return max;

}public

intgetdepth

(treenode root)

int depth1 =

getdepth

(root.left)

;int depth2 =

getdepth

(root.right);if

(depth1 + depth2 > max)

return math.

max(depth1, depth2)+1

;}

543 二叉樹的直徑

一種比較好的思路是。隨便找乙個點 一般取根節點 找到這棵樹中,距離這個點最遠的點,再從找到的這個點開始,找到距離它最遠的點。這種思路是帶有很強烈的數學成分。證明可自行解決。b站大佬是用動歸來做的,我不是很好理解。這裡給出一種基礎做法,即借助求二叉樹的深度的方式。對於每乙個節點,求其左右子樹的最大深度...

543 二叉樹的直徑

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。分析 考慮分治法。先求某節點到其...

543 二叉樹的直徑

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。class solution o...