二叉排序树算法,实现查、插、删、改,以及中序遍历
2011-05-27 23:17
417 查看
按照严老师算法改编,在VC++6.0上运行通过
如有不足的地方请大家多多指教!
#include "stdio.h" #include "stdlib.h" #define N 5 typedef struct BSTnode { int key; struct BSTnode *lchild,*rchild; }BSTnode,*BSTree; bool SearchBST(BSTree T,int key,BSTree f,BSTree &p) { if (!T) { p=f; return false; } else if (key==T->key) { p=T; return true; } else if (key<T->key) { return SearchBST(T->lchild,key,T,p); } else return SearchBST(T->rchild,key,T,p); } bool InsertBST(BSTree &T,int e) { BSTnode* s,*p; if (!SearchBST(T,e,NULL,p)) { s=(BSTnode*)malloc(sizeof(BSTnode)); s->key=e; s->lchild=NULL; s->rchild=NULL; if (!p) { T=s; } else if (e<p->key) { p->lchild=s; } else p->rchild=s; return true; } else return false; } bool Delete(BSTree &p) { BSTnode* q,*s; if (!p->rchild) { q=p; p=p->lchild; free(q); } else if (!p->lchild) { q=p; p=p->rchild; free(q); } else { q=p; s=p->lchild; while (s->rchild) { q=s; s=s->rchild; } p->key=s->key; if (q!=p) { q->lchild=s->lchild; } else q->lchild=s->lchild; free(s); } return true; } bool DeleteBST(BSTree &T,int key) { if (!T) { return false; } else { if (key==T->key) { return Delete(T); } else if (key<T->key) { return DeleteBST(T->lchild,key); } else return DeleteBST(T->rchild,key); } } void CreateTree(BSTree &root,int data[]) { BSTree p; BSTree current; BSTree father; int i; for(i=0;i<N;i++) { p=(BSTnode*)malloc(sizeof(BSTnode)); p->key=data[i]; p->lchild=NULL; p->rchild=NULL; if (root==NULL) { root=p; } else { current=root; while (current!=NULL) { father=current; if (current->key>data[i]) { current=current->lchild; } else current=current->rchild; } if (father->key>data[i]) { father->lchild=p; } else father->rchild=p; } } } void InOrderBSTree(BSTree T) { if (!T) { return; } else { InOrderBSTree(T->lchild); printf("%d ",T->key); InOrderBSTree(T->rchild); } } void main() { BSTree root=NULL; BSTree p; int data ; int key; printf("input the data of the tree:/n"); for(int i=0;i<N;i++) { scanf("%d",&data[i]); } CreateTree(root,data); InOrderBSTree(root); printf("/n"); printf("input the key value to search:/n"); scanf("%d",&key); if (SearchBST(root,key,NULL,p)) { printf("fouded!/n"); } else printf("Not found!/n"); printf("input the key value to insert:/n"); scanf("%d",&key); InsertBST(root,key); InOrderBSTree(root); printf("/n"); printf("input the key value to delete:/n"); scanf("%d",&key); DeleteBST(root,key); InOrderBSTree(root); printf("/n"); }
如有不足的地方请大家多多指教!
相关文章推荐
- 二分查找,二叉查找树(二叉排序树)的基本思想以及算法实现
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 分布式水库抽样算法实现以及原理
- 算法学习 - 树的三种遍历(递归实现)先序遍历,中序遍历,后序遍历
- 关于傅里叶变换的理解、快速傅里叶算法的推导以及蝶形运算的c语言实现
- 导向滤波实现代码以及使用颜色先验去雾算法
- 堆排序(基本思想以及算法实现)
- 数据挖掘算法以及其实现zz
- ECC算法分析--openssl的实现以及其调用流程
- 【数据结构与算法】二叉排序树C实现(含完整源码)
- (二叉树)谈一谈各类算法和数据结构的c++实现以及相关操作的复杂度(二)
- 【程序员眼中的统计学(6.2)】原创实现二项分布算法以及应用
- 14.二叉树 中序遍历 先序遍历 的非递归实现 以及 二叉树 的复制 及判断二叉树的等价性
- 18位身份证号验证算法的原理以及C#实现和在管理系统的应用
- 算法数据结构 单链表的实现+操作 以及和顺序表的对比
- 现代应用密码学中椭圆曲线求点集E以及点乘算法的java代码实现
- 算法--组合数学:杨辉三角数学分析以及Java实现
- 一种改进的道格拉斯-普克算法以及C++实现
- 实现二叉排序树的基本运算算法
- Partition算法以及其应用详解上(Golang实现)