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 } };