-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathisBalancedTree.cpp
More file actions
64 lines (54 loc) · 1.54 KB
/
isBalancedTree.cpp
File metadata and controls
64 lines (54 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
*Given a binary tree, determine if it is height-balanced.
*For this problem, a height-balanced binary tree is defined as a binary tree in which the
*depth of the two subtrees of every node never differ by more than 1
**/
class Solution {
public:
bool isBalanced(TreeNode* root) {
if(root == NULL)
return true;
int left = heightOfTree(root->left);
int right = heightOfTree(root->right);
int balance= left -right;
if(balance > 1 || balance < -1)
return false;
return isBalanced(root->left) && isBalanced(root->right);
}
int heightOfTree(TreeNode* root){
if(root == NULL)
return 0;
int left = heightOfTree(root->left);
int right = heightOfTree(root->right);
if(left > right)
return left+1;
else
return right+1;
}
};
//another solution which is faster using backorder traversal
class Solution {
public:
bool isBalanced(TreeNode* root) {
int depth = 0;
return isBalanced(root,&depth);
}
bool isBalanced(TreeNode* root, int* depth){
if(root == NULL)
{
*depth = 0;
return true;
}
int left,right;
if(isBalanced(root->left,&left) && isBalanced(root->right,&right))
{
int diff = left - right;
if(diff >= -1 && diff <= 1)
{
*depth = 1 + (left>right?left:right);
return true;
}
}
return false;
}
};