平衡二叉树的定义:(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);
}相关阅读:二叉树的常见问题及其解决程序 http://www.linuxidc.com/Linux/2013-04/83661.htm【递归】二叉树的先序建立及遍历 http://www.linuxidc.com/Linux/2012-12/75608.htm在JAVA中实现的二叉树结构 http://www.linuxidc.com/Linux/2008-12/17690.htm【非递归】二叉树的建立及遍历 http://www.linuxidc.com/Linux/2012-12/75607.htm二叉树递归实现与二重指针 http://www.linuxidc.com/Linux/2013-07/87373.htm