编写一个算法,判断给定的二叉树是否是二叉排序树
keyType predt=-32767;
int JudgeBst(BiTree bt)
{
int b1,b2;
if(bt==null)
return null;
else
{
b1=JudegeBst(bt->lchild);
if(bt==0||predt>=bt->data)
return 0;
predt=bt->data;
b2=JudegeBst(bt->rchild);
return b2;
}
}
设计一个算法,求出指定结点在给定二叉树排序树中的层次
算法思想
设二叉树采用二叉链表存储结构,在二叉排序树中,查找一次就下降一层。因此查找该结点所用的次数就是该结点在二叉树中的层次采用二叉排序树非递归查找算法,用n保存查找层次,没查找一次,n就+1,直到找到相应的结点。
int level(BiTree br,BSTNode *p)
{
int n=0;
Bitree t=bt;
if(bt!=null)
{
n++;
while(t->data!=p->data)
{
if(t->data<p->data)
t=t->rchild;
else
t=t->rchild;
n++;
}
}
return n;
}
采用二叉树遍历的思维编写一个判断二叉树是否是平衡二叉树的算法
算法思想:
设置二叉树的平衡标记balance,以标记返回二叉树是否是平衡二叉树,若为平衡二叉树,返回1,否则返回0;h为二叉树的高度,采用前序遍历的递归算法。
①若bt=null 则h=0,balance=1
②bt只有根结点 h=1,balance=1;
③否则,对bt的左右子树执行递归运算,返回左右子树的高度和平衡标记,bt的高度为最高子树的高度+1,若左右子树的高度差大于1,则balance=0.若左右子树的高度差小于1,则左右子树都平衡,balance=1.否则balance=0
void Judege_AVL(BiTree bt, int &balance,int &h)
{
int b1,br,h1,hr;
if(bt==null)
{
h=0;balance=1;
}
else if(bt->lchild==null&&bt->rchild==null)
{
h=1;balance=1;
}
else
{
Judege_AVL(bt->lchild,b1,h1);
Judege_AVL(bt->rchild,b2,hr);
h=(h1>hr?h1:hr)+1;
if(abs(h1,hr)<2)
balance=b1&&br;
else
balance=0;
}
}
设计一个算法,求出给定二叉排序树中最小和最大的关键字
在一棵二叉排序树中,最左下结点即为关键字最小的结点,最右下结点即为关键字最大的结点。
keyType Minkey(BSTNode *bt)
{
while(bt->lchild!=null)
bt=bt->lchild;
return bt->data;
}
keyType Maxkey(