#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100 /* 存储空间初始分配量 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
/* 二叉树的二叉链表结点结构定义 */
typedef struct BiTNode /* 结点结构 */
{
int data; /* 结点数据 */
struct BiTNode *lchild, *rchild; /* 左右孩子指针 */
} BiTNode, *BiTree;
/* 递归查找二叉排序树T中是否存在key, */
/* 指针f指向T的双亲,其初始调用值为NULL */
/* 若查找成功,则指针p指向该数据元素结点,并返回TRUE */
/* 否则指针p指向查找路径上访问的最后一个结点并返回FALSE */
Status SearchBST(BiTree T, int key, BiTree f, BiTree *p)
{
if (!T) /* 查找不成功 */
{
*p = f;
return FALSE;
}
else if (key==T->data) /* 查找成功 */
{
*p = T;
return TRUE;
}
else if (key<T->data)
return SearchBST(T->lchild, key, T, p); /* 在左子树中继续查找 */
else
return SearchBST(T->rchild, key, T, p); /* 在右子树中继续查找 */
}
/* 当二叉排序树T中不存在关键字等于key的数据元素时, */
/* 插入key并返回TRUE,否则返回FALSE */
Status InsertBST(BiTree *T, int key)
{
BiTree p,s;
if (!SearchBST(*T, key, NULL, &p)) /* 查找不成功 */
{
s = (BiTree)malloc(sizeof(BiTNode));
s->data = key;
s->lchild = s->rchild = NULL;
if (!p)
*T = s; /* 插入s为新的根结点 */
else if (key<p->data)
p->lchild = s; /* 插入s为左孩子 */
else
p->rchild = s; /* 插入s为右孩子 */
return TRUE;
}
else
return FALSE; /* 树中已有关键字相同的结点,不再插入 */
}
/* 从二叉排序树中删除结点p,并重接它的左或右子树。 */
Status Delete(BiTree *p)
{
BiTree q,s;
if((*p)->rchild==NULL) /* 右子树空,则只需重接它的左子树(待删结点是叶子也走此分支) */
{
q=*p; *p=(*p)->lchild; free(q);
}
else if((*p)->lchild==NULL) /* 右子树空,只需重接它的右子树 */
{
q=*p; *p=(*p)->rchild; free(q);
}
else /* 左右子树均不空 */
{
q=*p; s=(*p)->lchild;
//中序遍历,找到要删除的节点的前驱节点和后继节点。
while(s->rchild) /* 转左,然后向右到尽头(找待删结点的前驱) */
{
q=s;
s=s->rchild;
}
(*p)->data=s->data; /* s指向被删结点的直接前驱(将被删结点前驱的值取代被删结点的值) */
if(q!=*p)
q->rchild=s->lchild; /* 重接q的右子树 */
else
q->lchild=s->lchild; /* 重接q的左子树 */
free(s);
}
return TRUE;
}
/* 若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点, */
/* 并返回TRUE;否则返回FALSE。 */
Status DeleteBST(BiTree *T,int key)
{
if(!*T) /* 不存在关键字等于key的数据元素 */
return FALSE;
else
{
if (key==(*T)->data) /* 找到关键字等于key的数据元素 */
return Delete(T);
else if (key<(*T)->data)
return DeleteBST(&(*T)->lchild,key);
else
return DeleteBST(&(*T)->rchild,key);
}
}
int main(void)
{
int i;
int a[10]={62,88,58,47,35,73,51,99,37,93};
BiTree T=NULL;
for(i=0;i<10;i++)
{
InsertBST(&T, a[i]);
}
DeleteBST(&T,93);
DeleteBST(&T,47);
printf("本样例建议断点跟踪查看二叉排序树结构");
return 0;
}
相关推荐
Abaqus滞回问题求解—浆锚连接装配式剪力墙滞回模拟
当下土木工程研究生,多数都在从事装配式混凝土构件安全或装配式混凝土构件连接节点力学性能的研究。研究这类问题,几乎脱离不开对有限元软件的使用,Abaqus求解能力非常强大,但模型处理能力相对较弱。装配式混凝土结构的有限元计算与传统现浇结构相比,其节点处理起来相对复杂,计算结果往往需要凸显出连接节点力学特性,所以对建模精程度的要求较高。所以向大家介绍一款工具—HyperMesh软件(一下简称Hm),它是专业的有限元前处理工具,用于处理装配式混凝土构件或连接节点有限元模型比较合适。这篇文章主要介绍如何利用Hm处理
二叉排序树_BinarySortTree
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间
别再乱改grub.cfg了!手把手教你用GRUB2自定义多系统启动菜单(含UEFI/BIOS双模式配置)
本文详细介绍了如何安全、高效地使用GRUB2自定义多系统启动菜单,涵盖UEFI/BIOS双模式配置。通过避免直接编辑grub.cfg文件,采用正确的配置方法和命令,帮助用户打造稳定且美观的启动环境,特别适合Linux多系统用户和开发者。
平衡二叉树_AVLTree
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间
TSMC 40nm LP工艺下,新手画版图最容易踩的5个坑(附Cadence避坑指南)
本文详细解析了TSMC 40nm LP工艺下版图设计的5个常见陷阱,包括MOS管尺寸转换、DNW隔离、Guard Ring设计、金属布线和DRC检查。通过Cadence实战技巧和设计规则优化,帮助新手工程师规避典型错误,提升版图设计效率和质量。
i春秋第二届春秋欢乐赛 classical writeup
i春秋第二届春秋欢乐赛 classical writeup 第一步:题目给出的提示 根据题目我们可以了解这道题应该是一个古典密码的题目,但是古典密码太多了我们如何知道是什么? 看题目给出的附件是一个很长很长的乱序字符串,我们可以想到用词频分析一下: 发现里面有一段不一样的信息:LyjtL3fvnSRlo2xvKIjrK2ximSHkJ3ZhJ2Hto3x9 像是base64解码能够做出来,但是发现...
数据结构——查找
什么才算是好的散列函数呢?1.计算简单。
2021年软件测试面试题大全
简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(主要参与人员:开发、测试、产品、测试leader)。 6、开发提交代码至SVN或者GIT ,配管搭建测试环境。 7、执行测试用例,记录发现的问题。 8、验证bug与回归测试。 9、编写测试报告。 10、产品上线。 补充测试用例设计过程: 根据需求得出测试需求 设计测试方
tail -f 查找关键字_数据结构知识梳理:常用的查找算法详解
-点击上方“中国统计网”订阅我吧!-本篇讲讲数据结构里面常用的几个查找算法。顺序表查找顺序查找又叫线性查找,是最基本的查找技术,它的关键流程为:从表中第一个或最后一个记录开始,逐个对比该记录中的关键词与待查找关键词是否相等,如果某条记录中的关键词与待查找关键词相等,则表示查找成功,返回所查找记录;如果直到最后一条记录,其关键词与待查找关键词都不相等,则查找失败。具体实现代码如下:i...
Xiaojie雷达之路---毫米波雷达基础知识---角度估计
本篇文章主要介绍毫米波雷达的基础知识中的角度估计,对于本篇文章主要回答5个问题 1.在雷达的前方,如何估计前方一个物体的角度 2.角度测量的准确性 3.如何测量多个物体的角度 4.雷达可测的角度的视场最大值为多少 5.角度分辨率取决于什么因素 文章目录估计雷达前面一个物体的角度角度测量的准确性雷达的最大角视场测量雷达前方多个距离和速度相同的物体角度分辨率角度估计的流程 估计雷达前面一个物体的角度 估计一个物体的角度,最少需要两根接收天线 发射天线发送一个chirp,经过物体发射后信号,信号分别被第一根天
GD32单片机引脚复用指南:如何让JTAG接口的PA15/PB3发挥第二功能?
本文详细介绍了GD32F103Cx系列单片机如何通过AFIO模块进行引脚复用,特别是将默认用于JTAG调试接口的PA15、PB3等引脚释放为普通IO或复用功能引脚。文章从原理出发,结合代码实践,讲解了如何配置调试端口重映射,将JTAG引脚安全地转换为GPIO或定时器通道,并提供了常见问题排查与最佳实践,帮助开发者高效利用有限的引脚资源。
二叉排序树的基本算法实现
二叉排序树的基本算法实现 实验目的: 用二叉链表存储方式存储二叉排序树,并实现以下相关算法 1、创建二叉排序树 2、在二叉排序树上实现查询、插入和删除算法 3、对二叉排序树进行中序遍历以判断目标2是否完成 实验代码如下: #include <stdio.h> #include <iostream> using namespace std; ...
微信小程序 - [wxapplib]] backgroundfetch privacy fail {“errno”:101,“errMsg”:“private_getBackgroundFetchDa
微信小程序报错之backgroundfetch privacy fail,微信小程序报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {“errno“:101,怎么解决?问题出现:调用wx.chooseMessageFile报错(开发者工具中正常)用户隐私协议中未声明小程序使用此功能,安卓真机调试报错:backgroundfetch privacy fail ,怎么解决?微信小程序[wxapplib]] backgrou
数据结构(34)二叉排序树
目录 1、二叉排序树(BST,Binary Sort Tree)定义 2、二叉排序树的查找 3、二叉排序树的插入 4、二叉排序树的构造 6、二叉排序树的查找效率分析 7、二叉排序树与二分排序对比 1、二叉排序树(BST,Binary Sort Tree)定义 二叉排序树(也称为二叉查找树)或者是一棵空树,或者是具有以下特性的二叉树: 1)若左子树非空,则左子树上所有结点的值均小于根节点的值。 2)若右子树非空,则右子树上所有结点的值均大于根节点的值。 3)左、右子树也分别是一棵二叉排序
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
【数据结构】二叉排序树_BinarySortTree
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间初始分配量 */
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
02二叉排序树_BinarySortTree
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间初始分配量 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ /* 二叉树的二叉链表结点结构定义 */ typedef struct BiTNode /* 结点
BinarySortTree二叉排序树
深度优先搜索DFS 广度优先搜索BFS 什么时候要用深度优先遍历DFS呢 某些问题会用到,比如,找最近公共子串 深度优先遍历,代码写起来简洁,因为是使用递归调用,使用的栈, https://blog.youkuaiyun.com/rodman177/article/details/89771156 结合代码好好整理一下 ...
二叉排序树的实现
二叉排序树(Binary Sort Tree)又称二叉查找树。 它是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 二叉排序树是一种动态树表。 vs2008运行正确,如有误,请各位大牛指正! 实现代码如下:
数据结构-二叉排序树
二叉排序树(BinarySortTree): 具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; #include #include using namespace std; typedef struct node //记录类型
JavaScript数据结构之 二叉排序树
/** * 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 * 左边子节点的值 父节点的值 右边子节点的值 * 包括的方法有:插入、遍历、查询、查询父节点、右树上最小节点、 * 前中后序遍历、清空、删除、是否为空、求宽度、求深度 */ function BinarySortTree(value){ this
数据结构与算法-二叉排序树
二叉排序树 一、思路 二、源码 1.Node类 代码如下(示例): package BinarySortTree; public class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; } @Override public String toString()
BinarySortTree
二插排序树(Binary Sort Tree) 对于BST的任何一个非叶子结点,要求left的值比当前节点的值小,right的值比当前节点的值大 left[value] < current[value] && right[value] > current[value] BST的删除 1.删除叶子结点 1.找到要删除的节点 targetNode 2.找到targetNode的父节点 parent 3.确定targetNode 是 parent的左子节点 还是右子节点 4.根据前面的
二叉排序树(BinarySortTree)的添加,删除功能实现(java代码实现)
二叉排序树(BinarySortTree)的添加,删除功能实现(java代码) 介绍 二叉排序树:BST(Binary Sort Tree):要求该树的任何一个非叶子结点的左子结点的值小于当前结点的值,右子结点的值大于当前结点的值 注意:若是存在相同值的情况,则将该结点放在当前结点的左子结点或者右子结点都可以 删除结点的思路分析 分为三种情况: 第一种情况:删除的是叶子结点 第二种情况:删除的是只有一颗子树的结点 第三种情况:删除的是有两颗子树的结点 下面代码中会做详细的步骤分析 package com.b
JAVA数据结构--二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;在Java中构造二叉排序树实例如下: // tree.java // demonstrates bi...
笔记 | Java 数据结构——二叉排序树(BST)添加节点
/循环添加节点i++){//中序遍历二叉树System.out.println("中序遍历二叉树~");//添加节点root=node;}else{//中序遍历if(root!=null){}else {System.out.println("二叉排序树为空,不能遍历");//构建节点int value;Node left;Node right;//构造方法//添加节点//如果要添加的这个节点是空的话,直接退出return;
HBST = Hash-BinarySortTree
Hash-BinarySortTree在上一篇的文章中我对字符串常见的Hash函数进行了总结,在原来的代码中Hash的缓冲数组的元素是一条链表。即每个元素下“挂”的是一个单链表。我采用了设计模式中的策略模式对上次的代码进行了改造,把每个hash函数封装成一个类,这样程序更易于扩展和修改。除了对原来的代码进行重构之外,在Hash缓冲区数组中,每个元素下“挂”的不再是单链表,而是BinarySortTree(二叉排序树),本来想“挂”BalanceBinaryTree(平衡二叉树)后面考虑编程复杂度太大了,就没
Java实现二叉排序树
Java实现二叉排序树 1.源码如下: BinarySortTree类 package Util; /* 1.实现二叉排序树 */ public class BinarySorTree { public Node addNode(Node root,int data){ Node node = new Node(data); if(root =...
2901



被折叠的 条评论
为什么被折叠?



