Bst的基本操作
来源:互联网 发布:mui css js哪边下载 编辑:程序博客网 时间:2024/04/30 02:56
#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <queue>#include <stack>using namespace std;typedef struct BstNode{int data;BstNode *lchild, *rchild;}BstNode,*BstTree;void Bst_insert(BstTree &T,int z)//建树{if(T==NULL){T=(BstTree)malloc(sizeof(BstNode));T->lchild=NULL;T->rchild=NULL;T->data=z;}else{if(T->data!=z)if(T->data>z)Bst_insert(T->lchild,z);elseBst_insert(T->rchild,z);}}void Bst_preorder(BstTree T) //中序递归遍历{ if(T!=NULL) { Bst_preorder(T->lchild);printf("%d\n",T->data);Bst_preorder(T->rchild); } } bool Bst_exist(BstTree T,int z)//寻找某数值是否存在{if(T==NULL)return false;if(T->data==z)return true;if(T->data>z)Bst_exist(T->lchild,z);elseBst_exist(T->rchild,z);}BstTree Bst_search(BstTree T,int z)//寻找某数值的节点{if(T==NULL)return NULL;if(T->data==z)return T;if(T->data>z)Bst_search(T->lchild,z);elseBst_search(T->rchild,z);}BstTree Bst_min(BstTree T)//返回最小值{if(T==NULL)return NULL;BstTree y=T;while(y->lchild!=NULL)y=y->lchild;return y;}BstTree Bst_max(BstTree T)//返回最大值{if(T==NULL)return NULL;BstTree y=T;while(y->rchild!=NULL)y=y->rchild;return y;}BstTree Bst_parents(BstTree T,BstTree z)//寻找某节点的父节点{if(T==NULL)return NULL;BstTree y=T;if(y->data>z->data){if(y->lchild->data==z->data)return y;elsereturn Bst_parents(y->lchild,z);}else{if(y->rchild->data==z->data)return y;elsereturn Bst_parents(y->rchild,z);}}void Bst_delete(BstTree &T,int z)//删除节点{BstTree notez=Bst_search(T,z);BstTree parent,y;if(notez->lchild==NULL)//左为空{if(T->data!=z){parent=Bst_parents(T,notez);if(parent->lchild==notez)parent->lchild=notez->rchild;elseparent->rchild=notez->rchild;}elseT=T->rchild;}else if(notez->rchild==NULL)//右为空{if(T->data!=z){parent=Bst_parents(T,notez);if(parent->lchild==notez)parent->lchild=notez->lchild;elseparent->rchild=notez->lchild;}elseT=T->lchild;}else//左右都不为空{y=Bst_min(notez->rchild);parent=Bst_parents(T,y);if(y->rchild==NULL)//当最小点为叶子节点的时候if(parent->lchild==y)parent->lchild=NULL;elseparent->rchild=NULL;else//当最小点还有右节点的时候,需要把右树贴到最小点的位置{parent->lchild=y->rchild;}y->lchild=notez->lchild;y->rchild=notez->rchild;if(T->data!=z){parent=Bst_parents(T,notez);if(parent->lchild==notez)parent->lchild=y;elseparent->rchild=y;}elseT=y;}}void Bst_PreOrderTraverse(BstTree T){ stack<BstTree> stack; if(!T) { printf("空树!\n"); return; } while(T!=NULL || !stack.empty()) { while(T!=NULL) { stack.push(T); printf("%c",T->data); T=T->lchild; } T=stack.top(); stack.pop(); T=T->rchild; } }void Bst_InOrderTraverse(BstTree T){stack<BstTree> stack;if(!T) { printf("空树!\n"); return; }while(T!=NULL || !stack.empty())//当树的右端为空的时候,栈有东西可以开始吐出来{while(T!=NULL){stack.push(T);T=T->lchild;}T=stack.top();stack.pop();printf("%d\n",T->data);T=T->rchild;}}void Bst_PostOrderTraverse(BstTree T){ int flag[20]; stack<BstTree> stack; if(!T) { printf("空树!\n"); return; } while(T) { stack.push(T); flag[stack.size()]=0; T=T->lchild; } while(!stack.empty()) { T=stack.top(); while(T->rchild && flag[stack.size()]==0) { flag[stack.size()]=1; T=T->rchild; while(T) { stack.push(T); flag[stack.size()]=0; T=T->lchild; } T=stack.top(); } printf("%c",T->data); stack.pop(); } }void main(){BstTree T=NULL;Bst_insert(T,10);Bst_insert(T,6);Bst_insert(T,12);Bst_insert(T,3);Bst_insert(T,7);Bst_insert(T,11);Bst_insert(T,13);Bst_delete(T,3);Bst_preorder(T);Bst_InOrderTraverse(T);}
0 0
- Bst的基本操作
- BST的基本操作
- BST的基本操作
- 二叉搜索树(BST)的基本操作
- 二叉搜索树(BST)的基本操作
- 数据结构:二叉搜索树(BST)的基本操作
- 数据结构——二叉排序树的基本操作(BST)
- BST的操作
- POJ 2309 BST 树状数组基本操作
- 排序二叉树BST的基本操作(1)插入,查找,最大,最小
- 排序二叉树BST的基本操作(2)前驱,后继,删除
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- C语言实现二叉查找树(BST)的基本操作
- <数据结构与算法>二叉搜索树(BST)的基本操作(C语言描述)
- 数据结构回顾和总结(二叉搜索树(BST)的基本操作)
- 二叉搜索树(BST,基本操作实现)
- BST的插入、删除、查找操作
- 排序二叉树BST的基本操作(2)前驱,后继,删除 http://blog.csdn.net/feliciafay/article/details/12174307
- 64位和32位系统编程
- 各个JSON技术的比较
- __weak __typeof(self)weakSelf = self和__strong __typeof(weakSelf)strongSelf = weakSelf
- MD5 Collision Generator(根据王小云教授的算法写的MD5碰撞的程序[c源代码])
- CRLF
- Bst的基本操作
- Android动画学习笔记-Android Animation
- 换行符在不同系统中切换时修改工具
- select和Epoll的区别
- Instruments-查看收集到的数据
- 起点
- git 打patch
- java判断时间间隔长度
- Linux 安装、卸载程序