給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。
示例 :
給定二叉樹
1
/ \2 3
/ \
4 5
返回3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
注意:兩結點之間的路徑長度是以它們之間邊的數目表示。
分析:考慮分治法。先求某節點到其葉子節點的最大長度,即左子樹高度與右子樹高度最大值,遞迴求得根節點到葉子節點的最大長度。而某節點的直徑是左孩子直徑,右孩子直徑,左孩子高和右孩子高之和的最大值,遞迴求出根節點的直徑。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class solution
intgetheight
(treenode* root)
};
543 二叉樹的直徑
一種比較好的思路是。隨便找乙個點 一般取根節點 找到這棵樹中,距離這個點最遠的點,再從找到的這個點開始,找到距離它最遠的點。這種思路是帶有很強烈的數學成分。證明可自行解決。b站大佬是用動歸來做的,我不是很好理解。這裡給出一種基礎做法,即借助求二叉樹的深度的方式。對於每乙個節點,求其左右子樹的最大深度...
543 二叉樹的直徑
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹 1 2 3 4 5返回3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。class solution o...
543 二叉樹的直徑
其實就是求每個節點左右子樹高度和的最大值 可以結合樹的深度的遞迴求法,在遞迴的同時記錄每個節點高度和的最大值 class solution object def init self self.depth max 0 def diameterofbinarytree self,root if not ...