一、題目說明
題目543. Diameter of Binary Tree,計算二叉樹的直徑。直徑是任意兩個節點間的路徑的最大值。難度是Easy!
二、我的解答
這個題目看懂不難,計算左子樹的高度,右子樹的高度,直徑爲二者之和。這裏要注意的是,要計算每個節點的直徑人,然後求最大直徑,而不是單求樹根的直徑。
class Solution{
public:
int diameterOfBinaryTree(TreeNode* root){
depth = 1;
dfs(root);
return depth-1;
}
//計算二叉樹的深度
int dfs(TreeNode* root){
if(root == NULL) return 0;
int left = dfs(root->left);
int right = dfs(root->right);
depth = max(left+right+1,depth);
return max(left,right)+1;
}
private:
int depth;
};
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Diameter of Binary Tree.
Memory Usage: 19.7 MB, less than 92.59% of C++ online submissions for Diameter of Binary Tree.
三、優化措施
加上註釋的代碼:
class Solution{
public:
int diameterOfBinaryTree(TreeNode* root){
dfs(root);
return depth;
}
//計算二叉樹的深度,類似後續遍歷,表示以當前走到root爲根節點,左右兩邊較長的路徑
int dfs(TreeNode* root){
if(root == NULL) return 0;
int left = dfs(root->left);
int right = dfs(root->right);
depth = max(left+right,depth);//計算節點直徑,並更新depth的值,這裏多加了個1
return max(left,right)+1;
}
private:
int depth=0;
};