給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。
這題還是在 求子樹最大深度的基礎上改造。求出來每個節點的左子樹最大深度 和右子樹最大深度後,把這兩個深度加起來 就是「兩個結點路徑長度中的最大值」。這樣再定義乙個成員變數max來儲存最大的那個路徑長度。
在每一次把每乙個節點的左右子樹的兩個最大深度加起來後都把max和這個最大深度和進行比較,取大的值作為max。讓max始終維護 節點路徑長度最大,最後返回max即可。
class
solution
public
intmaxdepth
(treenode root)
int left=
maxdepth
(root.left)
;int right=
maxdepth
(root.right)
; max=math.
max(left+right,max)
;//將每個節點最大直徑(左子樹深度+右子樹深度)和當前最大值比較並取大者。也就是max始終只保留最長的路徑
return math.
max(left,right)+1;}}
遞迴 543 二叉樹的直徑
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。1 2 3 4 5返回 3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 最長路徑,不一定是路過根節點的。是任意兩個節點之間的。因此要記錄路過每個節點 以該節點為...
543 二叉樹的直徑
一種比較好的思路是。隨便找乙個點 一般取根節點 找到這棵樹中,距離這個點最遠的點,再從找到的這個點開始,找到距離它最遠的點。這種思路是帶有很強烈的數學成分。證明可自行解決。b站大佬是用動歸來做的,我不是很好理解。這裡給出一種基礎做法,即借助求二叉樹的深度的方式。對於每乙個節點,求其左右子樹的最大深度...
543 二叉樹的直徑
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。分析 考慮分治法。先求某節點到其...