平衡二叉树的定义:(1)必须是二叉树(可以是空树);(2)它的左右子树也应该是平衡二叉树,且左右子树的深度之差的绝对值不能超过1.(即可以为0,1)
struct Node
{
int data;
Node *left;
Node *right;
};
以上为节点的结构。
题目:现需要设计一个函数来判断给定的二叉树是否为平衡二叉树。【给定二叉树的根节点为R】
(1)依据平衡二叉树的定义来判断,即需要求设计一个求取树深度的函数
int Deepth(Node *R)
{
if(!R)
return 0;
else
{
int left_deep = Deepth(R->left);
int right_deep = Deepth(R->right);
return 1+((left_deep>=right_deep)?left_deep:right_deep);
}
}
bool IsBiTree(Node *R)
{
if(!R)
return true;
int left_deep = Deepth(R->left);
int right_deep=Deepth(R->right);
if(abs(left_deep - right_deep)>1)
return false;
else
return IsBiTree(R->left)&&IsBiTree(R->Right);
}
(2)直接递归判断方法。[写得风格有点糟糕,但愿思路没错]
bool IsBiTree(Node *R)
{
if(!R)
return true;
if(R->left==NULL && R->right==NULL)
return true;
else if(R->left==NULL && R->right->right==NULL)
return true;
else if(R->right==NULL && R->left->left==NULL)//前三种情况均是平衡二叉树结束的情况
return true;
else if(R->left==NULL && R->right->right)
return false;
else if(R->right==NULL && R->left->left)
return false;
else
return IsBiTree(R->left)&&IsBiTree(R->right);
}