In: Computer Science
Design a linear-time algorithm that verifies that the height information in an AVL tree is correctly maintained and that the balance property is in order. (C++)
#include <bits/stdc++.h>
using
namespace
std;
#define bool int
class
node {
public
:
int
data;
node*
left;
node*
right;
};
bool
isBalanced(node* root,
int
* height)
{
int
lh =
0, rh = 0;
int
l =
0, r = 0;
if
(root
== NULL) {
*height
= 0;
return
1;
}
l =
isBalanced(root->left, &lh);
r =
isBalanced(root->right, &rh);
*height = (lh > rh
? lh : rh) + 1;
if
(
abs
(lh - rh) >= 2)
return
0;
else
return
l && r;
}
node* newNode(
int
data)
{
node* Node =
new
node();
Node->data =
data;
Node->left =
NULL;
Node->right =
NULL;
return
(Node);
}
int
main()
{
int
height = 0;
node* root =
newNode(1);
root->left =
newNode(2);
root->right =
newNode(3);
root->left->left =
newNode(4);
root->left->right
= newNode(5);
root->right->left
= newNode(6);
root->left->left->left
= newNode(7);
if
(isBalanced(root, &height))
cout
<<
"Tree is balanced"
;
else
cout
<<
"Tree is not
balanced"
;
return
0;
}