/* Returns true if the given tree is foldable */
bool
isFoldable(
struct
node *root)
{
bool
res;
/* base case */
if
(root == NULL)
return
true
;
/* convert left subtree to its mirror */
mirror(root->left);
/* Compare the structures of the right subtree and mirrored
left subtree */
res = isStructSame(root->left, root->right);
/* Get the originial tree back */
mirror(root->left);
return
res;
}
bool
isStructSame(
struct
node *a,
struct
node *b)
{
if
(a == NULL && b == NULL)
{
return
true
; }
if
( a != NULL && b != NULL &&
isStructSame(a->left, b->left) &&
isStructSame(a->right, b->right)
)
{
return
true
; }
return
false
;
}
No comments:
Post a Comment