平衡二叉树判断


平衡二叉树的定义:(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);
}

二叉树的常见问题及其解决程序

【递归】二叉树的先序建立及遍历

在JAVA中实现的二叉树结构

【非递归】二叉树的建立及遍历

二叉树递归实现与二重指针

相关内容