543 求二叉樹直徑

2022-05-17 07:47:18 字數 624 閱讀 6854

假設我們知道對於該節點的左兒子向下遍歷經過最多的節點數 l (即以左兒子為根的子樹的深度) 和其右兒子向下遍歷經過最多的節點數 r (即以右兒子為根的子樹的深度),那麼以該節點為起點的路徑經過節點數的最大值即為 l+r+1

我們記節點 node 為起點的路徑經過節點數的最大值為dnode,那麼二叉樹的直徑就是所有節點 dnode的最大值減一。

最後的演算法流程為:我們定義乙個遞迴函式 depth(node) 計算 dnode.​ 函式返回該節點為根的子樹的深度。先遞迴呼叫左兒子和右兒子求得它們為根的子樹的深度 l 和 rr,則該節點為根的子樹的深度即為max(l,r)+1;該節點的 dnode值​ 

為l+r+1 

遞迴搜尋每個節點並設乙個全域性變數 ans 記錄 

dnode

​ 最大值,最後返回 ans-1 即為樹的直徑。

1/**

2* definition for a binary tree node.

3* struct treenode

8* };9*/

10class

solution

17int depth(treenode*root)

1824 };

view code

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...