【考研】东北大学二叉树相关算法(2)

编写一个算法,判断给定的二叉树是否是二叉排序树

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(
  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值