栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构——二叉搜索树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构——二叉搜索树

二叉搜索树:一颗二叉树,可以为空;如果不为空,满足以下性质:

1、非空左子树的所有键值小于其根节点的键值。

2、非空右子树的所有键值大雨其根节点的键值。

3、左、右子树都是二叉搜索树。

Position Find(ElementType X,BinTree BST):从二叉搜索树BST中查找元素X,返回其所在结点的地址;

Posittion FindMin(BinTree BST):从二叉搜索树BST中查找并返回最小元素所在结点的地址;

Position FindMax(BinTree BST):从二叉搜索树BST中查找并返回最大元素所在结点的地址。

BinTree insert(ElementType X,BinTree BST)

BinTree Delete(ElementType X,BinTree BST)

二叉搜索树的查找操作:Find

查找从根节点开始,如果树为空,返回NULL

若搜索树非空,则根据结点关键字和X进行比较,并进行不同处理:

1、若X小于根节点键值,只需在左子树中继续搜索;

2、如果X大于根节点的键值,在右子树中进行继续搜索;

3、若两者比较结果是相等,搜索完成,返回指向此结点的指针。

//尾递归
Position Find(ElementType X,BinTree BST)
{
    if(!BST)return NTLL;    //查找失败
    if(X>BST->Data)
        return Find(X,BST->Right);    // 在右子树中继续查找
    Else if(XData)
        return Find(X,BST->Left);    //在左子树中继续查找
    else    //x==BST->Data
        return BST;
}
//迭代函数
Posiition IterFind(ElementType X,BinTree BST)
{
    while(BST)
    {
        if(X>BST->Data)
            BST=BST->Right;    //向右子树中移动,继续查找
        else if(X->BST->Left);    //向左子树中移动,继续查找
            BST=BST->Left;
        else
            return BST;    //查找成功,返回结点的找到结点的地址
    }
    return NULL;   //查找失败
}

查找最大和最小元素

最大元素一定是在树的最右分支的端接点上,最小元素一定是在树的最左分支的端接点

//查找最小元素的递归函数
Position FindMin(BinTree BST)
{
    if(!BST)return NULL;    //空的二叉搜索树,返回NULL
    else if(!BST->Left)
        return BST;    //找到最左叶节点并返回
    else 
        return FindMin(BST->Left);    //沿左分支继续查找
}
//查找最大元素的迭代函数
Position FindMax(BinTree BST)
{
    if(BST)
        while(BST->Right)    BST=BST->Right;
            //沿右分支继续查找,直到最右叶节点
    return BST;
}

二叉树搜索的插入

关键是要找到元素应该插入的位置,可以采用与 Find类似的方法

BinTree Insert(ElementType X,BinTree BST)
{
    if(!BST)
    {
        //若原树为空,生成并返回一个结点的二叉搜索树
        BST=malloc(sizeof(struct TreeNoe));
        BST->Data=X;
        BST->Left=Bst->Right=null;
    }    //开始找要插入元素的位置
    else
        if(xData)
            BST->Left=Insert(X,BST->Left);    //递归插入左子树
        else if(X>BST->Data)
            BST->Right=Insert(X,BST->Right);
                //递归插入右子树
       //else X已经存在,什么都不做 
    return BST;
}

二叉搜索树的删除

要删除的是叶节点:直接删除,并再修改其父节点指针--置为NULL;要删除的结点只有一个孩子结点,将其父节点的指针指向要删除结点的孩子结点;要删除的结点有左、右两棵子树,用另一结点替代被删除结点:右子树的最小元素或者左子树的最大元素。

平衡因子(Balance Factor,简称BF):BF(T)=HL-HR,其中HL和HR分别为T的左、右子树的高度。平衡二叉树(Balanced Binary Tree)(AVL树)空树,或者任一结点左、右子树高度差的绝对值不超过1,既|BF(T)<=1。 

平衡二叉树的调整

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号