有关二叉树的基本知识,请参阅我的博客之一: 二叉树的链式存储

说明:

二进制排序树是具有以下属性的空树或二进制树:

1. 如果左子树不为空,则左子树上所有节点的值均小于其根节点的值;

2. 如果右子树不为空,则右子树上所有节点的值都大于其根节点的值;

3. 左右子树也是二叉排序树

说明:

通过重复将节点插入二叉树来构造二叉树!

如果二叉树为空树二叉排序树的建立c,则将元素插入为根节点.

如果根节点的键值等于key,则插入失败;

如果键小于根节点的键值二叉排序树的建立c,它将被插入到根的左子树中;否则,它将被插入到根的右子树中

新插入的节点必须是叶节点!

代码分析:

void InsertBST(BiStree &Tree,ElemType e)

{

BiStree T =Tree; //定义执行副本,!

BiStree father =NULL; //定义

while (T&&T->data.key!=e.key)

{

father=T;

if(e.key>T->data.key)

T=T->Rchild;

else

T=T->Lchild;

}

if(T) //跳出循环的只有两种情况,要么就是T不存在,要么就是找到了对应元素!T 存在说明,只能是对应元素也存在,那我我们就不用插入了

return;

BiSnode *s = (BiSnode*)malloc(sizeof(BiSnode));//能到这里,说明节点不存在,新建一个节点,并初始化!

s->data=e;

s->Rchild=s->Lchild=NULL;

if(father==NULL) //如果farther不存在,那说明就是没有执行While语句,也即是树是空的,因为一旦执行,就不会为NULL!

Tree=s;

else if(e.key>father->data.key) //到这里说明Farther存在,那么剩下的就是往farther左右节点插入元素了

father->Rchild=s;

else

father->Lchild=s;

}

说明:

删除操作的基础是查找元素. 首先,您需要找到要删除的元素. 如果找到它,将其删除. 如果找不到,则无需删除它.

找到一些代码:

void DelBST(BiStree &Tree,char key)

{

if(!Tree) //如果节点为空节点,说明要删除的元素不可能存在,所以返回就好!

return;

else //下面是节点存在的分情况判断:

{

if(Tree->data.key==key) //如果找到了要删除的节点!

{

deleteNode(Tree); //删除该节点

}

else if(Tree->data.key

DelBST(Tree->Rchild,key);

else

DelBST(Tree->Lchild,key);//如果要删除的节点小于该节点,则往该节点的左子树方向进行查找

}

}

现在我们已经找到了元素,要删除它,我们必须实现deleteNode(Tree);方法!

但是,删除元素的操作有很多情况,我们必须分别处理它们:

★要删除的节点* p是叶节点

★要删除的节点* p只是一个非空子树

★要删除的节点* p具有两个非空子树

如何找到直接的前任: 找到要删除的节点的第一个左子树,然后继续向右走!

删除代码如下:

void deleteNode(BiStree &p)

{

if(!p->Rchild) //对第一种及第二种情况的处理

{

BiSnode * q =p;

p=p->Lchild;

free(q);

}

else if(!p->Lchild) //对第一种及第二种情况的处理

{

BiSnode * q =p;

p=p->Rchild;

free(q);

} else

{

BiSnode * q =p;

BiSnode * s =p->Lchild;

while (s->Rchild)

{

q=s;

s=s->Rchild;

}

//s指向被删节点p的前驱

p->data=s->data;

if(q!=p) //详见下两图

q->Rchild=s->Lchild; //左图

else

q->Lchild=s->Lchild; //右图

free(s);

}

}

该代码不会被降级,非常简单!

查找键值为K的记录:

如果二进制排序树是空树,则搜索失败并返回;

如果根节点的键值等于key,则搜索成功并返回;

如果根节点的键值大于key,则继续在根的左子树上搜索;否则,继续在根的右子树上搜索

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-177261-1.html

matlab编程实现二进制树搜索,数据结构: 二进制搜索树(用C语言实现)相关推荐

  1. matlab编程实现二进制树搜索,binary-tree-collision-code 射频识别技术里的二进制树碰撞代码,防 能力 matlab 238万源代码下载- www.pudn.com...

    文件名称: binary-tree-collision-code下载 收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 794 KB 上传时间: 2013-04-22 ...

  2. c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序

    c语言将链表写入二进制文件 Problem statement: Write a C program to convert a binary tree into a single linked lis ...

  3. 网络编程 网络地址点分十进制和二进制之间的转换

    网络编程 网络地址点分十进制和二进制之间的转换 点分十进制->二进制 点分十进制转二进制的函数有inet_addr,inet_aton,inet_network,inet_pton,它们都将输入 ...

  4. 以下面四个在读写器作用范围内的电子标签为例说明二进制树型搜索算法选择电子标签的迭代过程。假设这四个电子标签的序列号分别为:

    电子标签 1:   10110010 电子标签 2: 10100011 电子标签 3: 10110011 电子标签 4: 11100011 二进制树型搜索算法算法在重复操作的第一次中由读写器发送 RE ...

  5. 4-3 以下面四个在读写器作用范围内的电子标签为例说明二进制树型搜索算法选择电子标签的迭代过程

    以下面四个在读写器作用范围内的电子标签为例说明二进制树型搜索算法选择电子标签的迭代过程.假设这四个电子标签的序列号分别为: 电子标签1:10110010 电子标签2:10100011 电子标签3:10 ...

  6. 实验二、80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。

    实验二.80C51汇编语言编程实验:编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性.需考虑有进位和无进位情况. 报价 200 文章目录 实验二.80C51汇编语言编 ...

  7. matlab两点之间的所有路径,引用 在图中搜索两点间的所有路径matlab编程

    引用 在图中搜索两点间的所有路径matlab编程 2018-09-18 function possiablePaths = findPath(Graph, partialPath, destinati ...

  8. java 数组构造_java – 从数组构造(非二进制)树

    我需要用Java构建一个树.我已经完成了树作为数据结构.但是我在将数据从数组提供给树时遇到了一些问题.这是我需要做的. domain = {"b", "c"}; ...

  9. C++编程积累——C++实现十进制与二进制之间的互相转换

    欢迎关注原创公众号 [计算机视觉联盟],回复 [西瓜书手推笔记] 可获取我的机器学习纯手推笔记! 直达笔记地址:机器学习手推笔记(GitHub地址) 目录 十进制与二进制之间的转换 十进制转换二进制 ...

最新文章

  1. 【每日一算法】罗马数字转整数
  2. 【Java】环形链表 ( 给定一个链表,判断链表中是否有环)
  3. 创建新的用户以及一系列的操作
  4. 数据结构与算法——树与二叉树详细分享
  5. Java小结(二)——打印矩形和九九乘法表
  6. 我一个女孩子居然做了十年硬件。​。。
  7. Unity手游之路四3d旋转-四元数,欧拉角和变幻矩阵
  8. MFC:ID命名和数字约定
  9. ShowWindowAsync系统方法cmdShow参数值含义
  10. android 传感器学习笔记 一
  11. 开源框架_Index
  12. Fizz Buzz 面试题
  13. 配置思科交换机冗余链路汇聚
  14. Python Built-in Functions内置函数用法总结(全)
  15. Win10 LTSC版如何安装应用商店Microsoft Store
  16. vmwareshanch删除快照以及删除快照时卡住的解决办法
  17. 惠普HP LaserJet Pro P1106 打印机驱动
  18. native react 折线图_【详解】纯 React Native 代码自定义折线图组件(译)
  19. 圆柱贴180度全景图片
  20. 计算机毕业设计之全网独家Spark租房爬虫数据分析与推荐系统 租房大数据 租房app 租房数据分析 租房爬虫 房源推荐系统 房源数据分析 房源可视化

热门文章

  1. C语言makefile文件详解,makefile讲解
  2. java的常用引用类、数组、String类
  3. 预训练模型对实体的表示能力差?一个简单有效的解法来了!(开源)
  4. 面试必备!卖萌屋算法工程师思维导图—统计机器学习篇
  5. LightGBM最强解析,从算法原理到代码实现~
  6. 论文浅尝 - ACL2020 | 用于多媒体事件提取的跨媒体结构化公共空间
  7. 神经网络不应视为模型,推理过程当为机器学习问题一等公民
  8. 看完这篇Linux基本的操作就会了
  9. Android官方开发文档Training系列课程中文版:电池续航时间优化之按需开启广播接收器
  10. Android官方开发文档Training系列课程中文版:与其它APP交互之将用户带到其它的APP