二叉排序树

简介:

复制代码
int source[]={54,90,6,69,12,37,92,28,65,83};

void InsertBST(BSTree *t,int key)//在二叉排序树中插入关键字key
{
    head=t;
    while(head) //查找需要添加的父结点 
    {
        parent=head;
        if(key<head->data) //若关键字小于结点的数据 
            head=head->left; //在左子树上查找 
        else                 //若关键字大于结点的数据 
            head=head->right;  //在右子树上查找                             
    }
    //判断添加到左子树还是右子树 
    if(key<parent->data) //小于父结点 
        parent->left=p; //添加到左子树
    else           //大于父结点 
        parent->right=p; //添加到右子树 
}


BSTree *SearchBST(BSTree *t,int key)
{
    if(!t || t->data==key) //结点为空,或关键字相等 
        return t;          //返回结点指针
    else if(key>t->data) //关键字大于结点数据
        return(SearchBST(t->right,key));
    else
        return(SearchBST(t->left,key));
}

void BST_LDR(BSTree *t)  //中序遍历 
{
     if(t)//树不为空,则执行如下操作 
     {
         BST_LDR(t->left); //中序遍历左子树
         printf("%d ",t->data); //输出结点数据 
         BST_LDR(t->right); //中序遍历右子树/
     }
     return; 
} 


//删除结点
void BST_Delete(BSTree *t,int key)
{
    BSTree *p,*parent,*l,*l1;
    int child=0;//0表示左子树,1表示右子树 
    if(!t) return;     //二叉排序树为空,则退出
    p=t;
    parent=p;
    while(p)           //二叉排序树有效 
    {        
        if(p->data==key)
        {
            if(!p->left && !p->right) //删除节点为叶结点(左右子树都为空) 
            {
                if(p==t) //被删除的是根结点 
                {
                    free(p);//释放被删除结点 
                }
                else if(child==0) //删除节点是父结点的左子树 
                {
                    parent->left=NULL; 
                    free(p); 
                }
                else //删除节点是父结点的右子树 
                {
                    parent->right=NULL; 
                    free(p); 
                }
            }
            else if(!p->left) //删除节点只有右子树
            {
                if(child==0) //删除节点是父结点的左子树
                    parent->left=p->right;
                else //删除节点是父结点的右子树             
                    parent->left=p->left;
                free(p); //释放被删除结点
            }
            else if(!p->right)//右子树为空,左子树不为空
            {
                 if(child==0) //是父结点的左子树
                    parent->right=p->right;
                else //是父结点的右子树             
                    parent->right=p->left;
                free(p); //释放被删除结点       
            }
            else  //左右子树都不为空 
            {
                l1=p; //保存左子树的父结点 
                l=p->right; //从当前结点的右子树进行查找 
                while(l->left) //左子树不为空 ,被删除节点的右子树中的最小值。
                {
                    l1=l;
                    l=l->left; //查找左子树 
                }
                p->data=l->data; //将左子树的数据保存到被删除结点
                l1->left=NULL; //设置父结点的左子树指针为空 
                free(l1); //释放左子树占的内存空间
            }
            p=NULL;
        }
        else if(key<p->data) //需删除记录的关键字小于结点的数据 
        {
            child=0;//标记在当前结点左子树查找
            parent=p; //保存当前结点作父结点 
            p=p->left; //查找右子树 
        }
        else //需删除记录的关键字大于结点的数据 
        {
            child=1;//标记在当前结点右子树查找
            parent=p;//保存当前结点作父结点 
            p=p->right; //查找右子树 
        }    
    } 
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4489834.html,如需转载请自行联系原作者

相关文章
|
5天前
|
人工智能 运维 安全
|
3天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
10天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
848 109
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
482 12
|
4天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
5天前
|
机器学习/深度学习 传感器 算法
Edge Impulse:面向微型机器学习的MLOps平台——论文解读
Edge Impulse 是一个面向微型机器学习(TinyML)的云端MLOps平台,致力于解决嵌入式与边缘设备上机器学习开发的碎片化与异构性难题。它提供端到端工具链,涵盖数据采集、信号处理、模型训练、优化压缩及部署全流程,支持资源受限设备的高效AI实现。平台集成AutoML、量化压缩与跨硬件编译技术,显著提升开发效率与模型性能,广泛应用于物联网、可穿戴设备与边缘智能场景。
188 127