算法思想: 递归遍历二叉树的每一个节点,求出节点左右子树的高度,如果高度之差不超过1,就是平衡二叉树
typedef struct Node
{
int data;
struct Node *lchild,*rchild;
}BiTNode,*BiTree;
int get_depth(BiTree T)
{
int m,n;
if(!T) return ;
else
{
m=get_depth(T->lchild);
n=get_depth(T->rchild);
return m>n?m+1:n+1;
}
bool isBalanced(BiTree T)
{
int lh,rh;
if(!T) return true;
{
lh= get_depth(T->lchild);
rh= get_depth(T->rchild);
if(abs(lh-rh)<=1 )//abs绝对值函数
return isBalanced(T->lchild)&&isBalanced(T->rchild);
else
return false;
}
}
方法二,设置标志位flag
int flag=1;
int height2(BiTree root )
if(root==NULL)
return 0;
int left=height2(root->left);
int right=height2(root->right);
int diff=left-right;
if(diff>1||diff<-1)
flag= 0;
return left>right ? left+1:right+1;
}
bool isBalanced(BiTree root){
height2(root);
if(flag==1)
return true;
else
return false;
}
}