如果二叉树的左子树和右子树都是平衡的,并且左子树和右子树的高度之差小于或等于 1,则称二叉树高度平衡。
我必须找出给定的二叉树是否平衡!
基于上述概念,我使用了以下代码:
bool isbalanced(struct node *root)
{
int left,right;
if(root==NULL)
return true;
else
{
left=height(root->left);
right=height(root->right);
if(abs(left-right)<=1 && isbalanced(root->right)==true && isbalanced(root->left)==true)
return true;
else
{
return false;
}
}
}
我使用单独的 height() 函数计算了高度:
int height(struct node *root)
{
if(root==NULL)
return 0;
int left=height(root->left);
int right=height(root->right);
if(left>right)
return 1+left;
else
return 1+right;
}
如果树是平衡的或不平衡的,我会得到正确的解决方案。但是如果给定的树是倾斜的,那么时间复杂度将是 O(n^2)。
有没有一种方法可以让我以更有效的方式完成这项任务?