当前位置: 首页 > news >正文

二叉排序树

实现二叉排序树的搜索,插入,删除。

代码如下:

  1 //#define int ElemType
  2 #include<stdio.h>
  3 #include<stdlib.h>
  4  
  5 //#define int KeyType
  6 typedef struct BiTNode{
  7     int data;
  8     struct BiTNode *lchild,*rchild;
  9 }BiTNode,*BiTree;
 10 bool SearchBST(BiTree T,int key,BiTree f,BiTree &p)
 11 {
 12   if(!T)
 13   {
 14       p=f;
 15       return false;
 16   }
 17   else
 18       if(key==T->data)
 19       {
 20           p=T;
 21           return true;//查找成功
 22       }
 23       else
 24           if(key<T->data)
 25               return SearchBST(T->lchild,key,T,p);//继续在左子树中查找
 26           else
 27               return SearchBST(T->rchild,key,T,p);//继续在右子树中查找
 28 }
 29 void InsertBST(BiTree &T,int e)
 30 {
 31     BiTree p,s;
 32     if(!SearchBST(T,e,NULL,p))
 33     {
 34         s=(BiTree)malloc(sizeof(BiTNode));
 35         s->data=e;
 36         s->lchild=s->rchild=NULL;
 37         if(!p)
 38             T=s;//被插结点*s为新的根节点
 39         else
 40             if(e<p->data)
 41                 p->lchild=s;//被插入结点*s为左孩子
 42             else
 43                 p->rchild=s;//被插结点*s为右孩子
 44 
 45     }
 46     else
 47         printf("已有相同数据,请重新插入");    
 48 }
 49 void Delete(BiTree &p)
 50 {
 51     BiTree q,s;
 52     if(!p->rchild)
 53     {
 54       q=p;
 55       p=p->lchild;
 56       free(q);
 57     }
 58     else
 59         if(!p->lchild)
 60         {
 61             q=p;
 62             p=p->rchild;
 63             free(q);
 64         }
 65         else//左右子树均不为空的情况
 66         {
 67             q=p;
 68             s=p->lchild;
 69             while(s->rchild)
 70             {
 71                 q=s;
 72                 s=s->rchild;
 73             }
 74             p->data=s->data;
 75             if(q!=p)
 76                 q->rchild=s->lchild;
 77             else
 78                 q->lchild=s->rchild;
 79             delete s;
 80         }
 81 }
 82 void DeleteBST(BiTree &T,int key)
 83 {
 84     if(!T)
 85         printf("不存在关键字等于key的数据元素");
 86     else
 87     {
 88         if(key==T->data)
 89             Delete(T);
 90         else
 91             if(key<T->data)
 92                 DeleteBST(T->lchild,key);
 93             else
 94                 DeleteBST(T->rchild,key);
 95     }
 96 }
 97 
 98 //中序遍历二叉树
 99 void Midorder(BiTree bt)
100 {
101     if(bt)
102     {
103         Midorder(bt->lchild);
104         printf("%d",bt->data);
105         Midorder(bt->rchild);
106     }
107 }
108 int main()
109 {
110     BiTree bt;
111     bt=(BiTNode*)malloc(sizeof(BiTNode));
112     bt->data=1;
113     bt->lchild=NULL;
114     bt->rchild=NULL;
115     InsertBST(bt,2);
116     InsertBST(bt,3);
117     InsertBST(bt,4);
118     DeleteBST(bt,1);
119     Midorder(bt);
120     return 0;
121 }
View Code

 

转载于:https://www.cnblogs.com/wj204/archive/2013/06/01/3113314.html

相关文章:

  • 【spring cloud】spring cloud子module的pom文件添加依赖,出现unknown问题【maven】
  • docker安装启动停止
  • firefox 不支持innertext, 需要用innerhtml代替
  • CPU占用过高问题排查
  • 《Linux学习并不难》文件/目录管理(7):rmdir命令删除空目录
  • Eclipse 整后tomcat的webApps目录
  • 【插件式框架探索系列】使用多UI线程提升性能
  • SQL事务回滚的问题及其解决的方法
  • 解决Fedora没有最大化最小化按钮
  • scala Option,None和Some
  • 安装 mysql 数据库, 并做 主 从(一)
  • 《汇编语言第二版——王爽》实验五,5、6题
  • Java面向对象编程
  • elasticsearch无故关闭,Log无报错
  • Java消息中间件入门笔记 - ActiveMQ篇
  • 「面试题」如何实现一个圣杯布局?
  • ES6 ...操作符
  • Git 使用集
  • JavaScript异步流程控制的前世今生
  • Java比较器对数组,集合排序
  • Js基础知识(一) - 变量
  • React16时代,该用什么姿势写 React ?
  • spring-boot List转Page
  • STAR法则
  • V4L2视频输入框架概述
  • Vim Clutch | 面向脚踏板编程……
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 机器学习 vs. 深度学习
  • 将 Measurements 和 Units 应用到物理学
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 消息队列系列二(IOT中消息队列的应用)
  • 一个SAP顾问在美国的这些年
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #pragma once
  • #pragma pack(1)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • .NET CLR Hosting 简介
  • .net refrector
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET上SQLite的连接
  • /etc/fstab和/etc/mtab的区别
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] STL---stack与queue
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [Android]常见的数据传递方式
  • [Android]通过PhoneLookup读取所有电话号码
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [CSS]CSS 字体属性
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败