二叉排序数的基本操作(构造、插入、删除)
来源:互联网 发布:满档红帽哥布林数据 编辑:程序博客网 时间:2024/05/21 19:02
首先,给出二叉排序树的定义:
二叉排序树是一棵二叉树,它或者为空,或者满足以下条件:
1.若左子树不空,则左子树上所有结点的值均小于根的值
2.若右子树不空,则右子树上所有结点的值均大于根的值
3.其左右子树均为二叉排序树
我们根据定义可以知道,二叉排序树的中序序列是非降序序列
在本文中,主要涉及二叉排序树的三大操作,构造,插入,删除节点
1.构造二叉排序树
用户输入节点的值,判断是否为结束符,若不是,则继续插入节点到树中
2.插入操作
如果是空树,则插入节点成为根节点。若该节点的值小于根节点的值,插入到左子树中,否则插入到右子树中
3.删除节点
笼统地说,就是找到要删除节点,然后将它左子树的最右边的节点找出来,顶替要删除的节点。
#include <iostream>using namespace std;const int End_Of_Num = -1; //表示结束符号typedef struct Bnode{ int key; struct Bnode *lchild; struct Bnode *rchild;}Bnode,*Tree;void insert(Bnode *&T,Bnode *S){ //将指针S所指节点插入到二叉排序树T中 if(T == NULL) //若插入到空树中,插入节点成为根节点 T = S; else if(S->key < T->key) insert(T->lchild,S); else insert(T->rchild,S);}void create_bst(Bnode *&T){ //建立二叉排序树 Bnode *u; T = NULL; int x; cin>>x; while(x!=End_Of_Num){ u = new Bnode; u->key = x; u->lchild = NULL; u->rchild = NULL; insert(T,u); cin>>x; }}void inorderVisit(Tree T){ //中序遍历 if(T != NULL){ inorderVisit(T->lchild); cout<<T->key<<" "; inorderVisit(T->rchild); }}void Delete(Tree T,int x){ //删除节点 Tree f,p = T; while(p && p->key !=x){ if(p->key > x){ f = p; p = p->lchild; } else{ f = p; p = p->rchild; } } if(p == NULL) return; //表示没找到 if(p->lchild == NULL){ if(f->lchild == p) f->lchild = p->rchild; else f->rchild = p->rchild; } else{ //被删结点有左子树 Tree q = p->lchild; Tree s = q; while(q->rchild != NULL){ s = q; q = q->rchild; } if(s == p->lchild){ //p的左子树的根节点无左右孩子 p->lchild = s->lchild; p->key = s -> key; free(s); } else{ p->key = q->key; s->rchild = q->lchild; free(q); } } }int main(){ Bnode *T; create_bst(T); //建立二叉排序树 inorderVisit(T); //中序遍历二叉排序树,从小到大输出 Delete(T,100); cout<<endl; inorderVisit(T); return 0;}
0 0
- 二叉排序数的基本操作(构造、插入、删除)
- 二叉查找树的基本操作之查找插入删除
- 二叉搜索树(二叉排序数)的基本操作实现
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- 堆的基本操作:定义、创建、插入、删除、排序
- 二叉搜索树的基本操作(查找、插入、删除)【数据结构】
- 二叉查找树的基本操作(建立,插入,删除,遍历)
- 实现StringGrid的删除,插入,排序行操作(基本操作啦)
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- 二查排序树的基本操作(插入,删除,找前驱与后继)
- 链表的基本操作(插入,删除,排序、逆置等)
- 二叉搜索树的插入和删除结点操作以及iterator的构造
- 数据结构——二叉树的插入构造和删除操作
- 二叉排序数的构造-理论
- 二叉搜索(排序)树的 查找、插入、删除
- 排序二叉树的插入和删除
- 二叉查找树的操作(插入、删除、查找)
- 事务四大特征:原子性,一致性,隔离性和持久性(ACID)
- 父子控制器
- putty 使用之psftp.exe,远程服务器和本机之间上传下载。
- Windows下的包管理器Chocolatey
- windows中遍历指定文件夹下的所有子文件夹
- 二叉排序数的基本操作(构造、插入、删除)
- PHP代码调试
- linux 下基本的I/O系统函数
- NYOJ 812 水题 十进制 二进制 转换
- hdu 3631 Shortest Path floyd 解题报告
- iOS——教你如何使用ReactiveCocoa和MVVM为代码解耦构建清爽APP
- Ubuntu 删除个人配置文件
- 匹配汉字的正则表达式
- win2008R2域环境配置用户主目录