遞迴 543 二叉樹的直徑

2021-10-07 04:56:40 字數 799 閱讀 2881

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

2 3/ \

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

最長路徑,不一定是路過根節點的。是任意兩個節點之間的。

因此要記錄路過每個節點(以該節點為根節點)的直徑情況:左子樹高度加右子樹高度。這其中最大的數字才是最長路徑。

每一次遞迴的返回值,是本層的深度。返回的是當前深度加一。這樣就是上一層節點的深度。

最後一層遞迴實際求出來的就是最大深度。但是在程式中按照慣例+1.在主函式中最終結果就需要減1.

最大路徑和(節點值)

public

class

treenode

}int ans;

public

intdiameterofbinarytree

(treenode root)

public

intdepth

(treenode root)

int l =

depth

(root.left)

;int r =

depth

(root.right)

;// 路過每個節點(以該節點為根節點)的直徑情況

ans = math.

max(ans,l+r+1)

;// 這一層的最大深度

return math.

max(l,r)+1

;}

543 二叉樹的直徑(遞迴)

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。這題還是在 求子樹最大深度的基礎上改造。求出來每個節點的左子樹最大深度 和右子樹最大深度後,把這兩個深度加起來 就是 兩個結點路徑長度中的最大值 這樣再定義乙個成員變數m...

543 二叉樹的直徑

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

543 二叉樹的直徑

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