解題思路
一開始的想法是看 root->left 跟 root->right 各自的最大深度,然後加起來就是答案,因為等同於從左邊最深走到右邊最深的路徑。
不過後來有測資錯誤。要考量的不只是 root 底下的左子樹與右子樹,而是所有 node 底下的左子樹與右子樹都要檢查,所以要一直往下 recursive 的 max 當前最大與左右子樹的最大。
程式碼
class Solution {
public:
int getDepth(TreeNode* p)
{
if(p == nullptr)
return 0;
return max(getDepth(p->left), getDepth(p->right)) + 1;
}
int diameterOfBinaryTree(TreeNode* root) {
if(root == nullptr)
return 0;
int left = getDepth(root->left);
int right = getDepth(root->right);
int sub = max(diameterOfBinaryTree(root->left), diameterOfBinaryTree(root->right));
return max(sub, left + right);
}
};
沒有留言:
張貼留言