您的位置:首页 > 其它

平衡二叉树判断

2013-10-29 23:15 281 查看
平衡二叉树的定义:(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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  平衡二叉树