平衡二叉树的判定

课程设计的代码
2025-03-13 04:35:04
推荐回答(2个)
回答1:

先根据结果建立一个相应的二叉树..然后用下面的函数应该可以了!!!
int depth_bt(struct tree *t) /*求二叉树深度*/
{
if(t==NULL) return 0;
return 1+max(depth_bt(t->lchild),depth_bt(t->rchild));
}
int balance(struct tree *t) /*递归[判断是不是平衡二叉树*/
{ int bl,br;
if(t==NULL) return 1; /*空树输出是平衡二叉树*/
bl=depth_bt(t->lchild); /*将左子树的深度赋值给bl*/
br=depth_bt(t->rchild); /*将右子树的深度赋值给br*/
if(bl-br>1||br-bl>1)return 0; /*如果不满足平衡二叉树的定义返回错误信息*/
return balance(t->lchild)&&balance(t->rchild); /*递归调用*/
}

回答2:

根据定义来判定:平衡二叉树的根结点的左子树和右子树都是平衡二叉树,且高度相差不超过1。
算法设计:
函数
is_AVL(Node
V,
int&
h)返回以结点V为根的子树是否是平衡二叉树,同时计算子树高度存入h中返回。(假设V->lchild和V->rchild分别存储V的左子结点和右子结点指针)
bool
is_AVL(Node
*V,
int&
h)
{
int
h1,
h2;
if(V
==
NULL)
{
//空子树
h
=
0;
return
true;
}
bool
bl
=
is_AVL(V->lchild,
h1);
bool
br
=
is_AVL(V->rchild,
h2);
h
=
max(h1,
h2)+1
if(bl
&&
br
&&
abs(h1-h2)<=1)
return
true;
else
return
false;
}
若二叉树的根结点为root,则is_AVL(root)返回整棵二叉树是否是平衡二叉树。