LeetCode 543——二叉樹的直徑(深度優先搜尋DFS)
阿新 • 來源:網路 • 發佈:2021-02-14
技術標籤:LeetCode刷題
一、題目介紹
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。
示例 :
給定二叉樹
1
/ \
2 3
/ \
4 5
返回3, 它的長度是路徑 [4,2,1,3] 或者[5,2,1,3]。
注意:兩結點之間的路徑長度是以它們之間邊的數目表示。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/diameter-of-binary-tree
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
二、解題思路
本意實際是考察如何計算二叉樹的深度。題目中提到的任意兩點的直徑長度,實際上等價於任意節點的左右子樹的深度之和。因此可以通過深度優先搜尋的辦法,計算每個節點的左右子樹的深度(Left,Right),並記錄其中最大的Left+Right之和。
三、解題程式碼
class Solution {
public:
int maxVal = 0;
int diameterOfBinaryTree(TreeNode* root) {
//本題意在考察求二叉樹的深度問題,採用遞迴的方法
depth(root);
return maxVal;
}
int depth(TreeNode* node)
{
if(node == NULL)
return 0;
int Left = depth(node->left); //計算左子樹的深度
int Right = depth(node->right); //計算右子樹的深度
maxVal = max(Left + Right, maxVal); //最大直徑實際為左右子樹的深度之和
return max(Left, Right) + 1; //當前節點的深度為其左右子樹深度的最大值 + 1
}
};
四、解題結果

