Skip to content

Commit c694252

Browse files
Update diameter_0f_binary_tree.cpp
1 parent f7052f3 commit c694252

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

diameter_0f_binary_tree.cpp

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,31 @@
44
* int val;
55
* TreeNode *left;
66
* TreeNode *right;
7-
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
810
* };
911
*/
1012
class Solution {
11-
int ans;
12-
int findDia(TreeNode* root){
13-
if(!root)
14-
return 0;
15-
int lh = findDia(root->left);
16-
int rh = findDia(root->right);
17-
ans = max(ans,1+lh+rh);
18-
return 1+max(lh,rh);
13+
private:
14+
int height(TreeNode* root, int &diameter) {
15+
16+
if(!root) return 0;
17+
18+
int leftHeight = height(root->left, diameter);
19+
int rightHeight = height(root->right, diameter);
20+
21+
diameter = max(diameter, leftHeight + rightHeight + 1); //this is the smart trick to avoid computing recursive diameter again here...at any point in the recursion..diameter will be left + right + 1
22+
23+
return 1 + max(leftHeight, rightHeight); //standard height recursive call..
1924
}
25+
26+
2027
public:
2128
int diameterOfBinaryTree(TreeNode* root) {
22-
ans=0;
23-
findDia(root);
24-
return ans>0?ans-1:0;
29+
int diameter = INT_MIN;
30+
31+
height(root, diameter);
32+
return diameter == INT_MIN ? 0 : diameter-1;
2533
}
26-
};
34+
};

0 commit comments

Comments
 (0)