当前位置:网站首页>排序二叉树代码
排序二叉树代码
2022-08-10 05:44:00 【牛奶还是纯的好】
#include<stdio.h>
// #include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
typedef struct BST_node{
DataType data;
struct BST_node *lchild,*rchild;
}BST_T;
BST_T* Search_BST(BST_T** root,DataType key)
{
BST_T *p =*root;
while(p)
{
if(p->data==key) return p;
p=(key < p->data)?p->lchild:p->rchild;
}
return NULL;
}
void Insert_BST(BST_T** T,DataType data)
{
BST_T *p_bst =(BST_T*)malloc(sizeof(BST_T));
if(!p_bst) return;
p_bst->data =data;
p_bst->lchild=p_bst->rchild=NULL;
//empty tree
if((*T)==NULL)
{
*T = p_bst;
return;
}
//是否存在,已存在则返回,不插入
if (Search_BST(T, data) != NULL) return;
//insert
BST_T* tnode=NULL; BST_T *troot=(*T);
while(troot)
{
tnode = troot;
troot =(data<troot->data)? troot->lchild:troot->rchild;
}
if(data < tnode->data)
tnode->lchild =p_bst;
else
tnode->rchild =p_bst;
}
void CreateBST(BST_T** T,int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
Insert_BST(T,a[i]);
}
}
void MidOrderTraverse(BST_T* T)
{
if (T)
{
MidOrderTraverse(T->lchild);
//cout << T->data << " ";
printf("%d\t",T->data);
MidOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BST_T* T)
{
if (T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%d\t",T->data);
}
}
void PreOrderTraverse(BST_T* T)
{
if (T)
{
printf("%d\t",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void DeleteBSTNode(BST_T** root,DataType data)
{
BST_T *p = *root;
BST_T *parent =NULL;
BST_T *s =NULL;
if (!(*root)) return;
if(p->data == data)
{
//删除的是叶子节点
if(p->lchild==NULL && p->rchild==NULL)
*root =NULL;
//只有一个子节点
else if(!p->rchild&&p->lchild)
*root =p->lchild;
else if (!p->lchild&&p->rchild)
*root =p->rchild; //为了退出递归
//左子树右子树都有
else{
s = p->rchild;
//删除倒数第二层的节点
if(!s->lchild)
s->lchild =p->lchild;
//删除倒数第二层往上的节点
else{
while(s->lchild)
{
parent = s;
s= s->lchild;
}
parent->lchild =s->rchild;
s->lchild =p->lchild;
s->rchild = p->rchild;
}
(*root) = s;
}
free(p);
}
else if(data > p->data)
DeleteBSTNode(&(p->rchild),data);
else if(data < p->data)
DeleteBSTNode(&(p->lchild),data);
}
int main()
{
int arr[] = { 17,12,19,10,15,18,25,8,11,13,16,22};
BST_T *root =NULL;
CreateBST(&root,arr,12);
//printf("\nCreate BST: ");
// printf("\nMid order traverse: ");
// MidOrderTraverse(root);
printf("\npre order traverse: ");
PreOrderTraverse(root);
// printf("\npost order traverse: ");
// PostOrderTraverse(root);
//查找某节点
BST_T *result = Search_BST(&root, 12);
printf("查找结果:%d\n",result->data);
//删除二叉排序树中的节点12
DeleteBSTNode(&root, 8);
printf("\npre order traverse: ");
PreOrderTraverse(root);
// printf("\npost order traverse: ");
// PostOrderTraverse(root);
// printf("\n");
}
边栏推荐
- netlink IPC
- Explore the origin of the garbled problem: the association between GBK, UTF8, UTF16, UTF8BOM, and ASN1
- MySQL笔记
- Kernel Image File Format
- ArgumentException: GetComponent requires that the requested component ‘GameObject‘ derives from Mono
- Qt程序字体初始化引起的白屏问题
- Kernel performance analysis summary
- Myunity框架笔记2
- 21天学习挑战赛--字符串切割
- OSPF的dr和bdr
猜你喜欢
浅谈游戏中3种常用阴影渲染技术(3):阴影贴图
Mysql表数据在命令行窗口下中文乱码问题解决方法
elf文件与链接脚本
Unity的GetComponentsInChildren1、2、3
Ingress Controller performance test(1)
BUUCTF笔记(web)
Easy to master Unity of eight prior to rendering
Hypervisor, KVM, QEMU总结
网页安全证书错误但无法安装证书的解决办法
Talking about 3 common shadow rendering techniques in games (2): shadow cone
随机推荐
Qt列表下方增加弹出加载数据提示效果
MySQL笔记
Qt滚动条(QScrollBar)圆角样式问题跟踪
Qt绘制椭圆曲线的角度问题(离心角和旋转角)
指纹浏览器在使用易路代理时常见的问题及解决办法
COLMAP+OpenMVS实现物体三维重建mesh模型
Unity屏幕坐标转世界坐标,鼠标点击获取三维位置
Unity扩展编辑器EditorWindow 小玩意(二)
废酸回收再利用
强化学习_08_Datawhale针对连续动作的深度Q网络
动态代理-cglib
unity瓦片地图调整图片大小
BUUCTF笔记(web)
如何在AdsPower中设置YiLu代理?
Simplest character device driver
全网可达并设备加密
不同场景如何使用动态代理?
UnityShader入门精要-基础纹理
虚幻5简单第三人称游戏制作文档
内核映像文件格式