二叉排序树的建立_查找_插入_删除
2013-09-25 20:36
471 查看
#include<iostream> using namespace std; typedef int KeyType; typedef int Status; #define OK 1 #define ERROR 0 typedef struct { KeyType Key; }ElemType,TElemType; typedef struct BitNode { TElemType data; struct BitNode *lchild,*rchild; }BitNode,*BiTree; Status SeachBST(BiTree T,KeyType key,BiTree f,BiTree &p) { if(!T) { p=f; return false; } else if(key==T->data.key) { p=T; return true; } else if(key<T->data.key) SeachBST(T->lchild,key,T,p); else SeachBST(T->rchild,key,T,p); return false; } Status InsertBST(BiTree &T,ElemType e) { BiTree p,s; if(!SeachBST(T,e.key,NULL,p)) { s=(BiTree)malloc(sizeof(BitNode)); s->data=e; s->lchild=s->rchild=NULL; if(!p) T=s; else if(e.key<p->data.key) p->lchild=s; else p-rchild=s; return true; } else return false; } void Delete(BiTree &p); Status DeleteBST(BiTree &T,KeyType key) { if(!T) return false; else { if(key==T->data.key) Delete(T); else if(key<T->data.key) DeleteBST(T->lchild,key); else DeleteBST(T->rchild,key); return true; } } void Delete(BiTree &p) { BiTree q,s; if(!p->rchild) { q=p; p=p->lchild; } else if(!p-lchild) { q=p; p=p->rchild; free(q); } else { q=p; s=p->rchild; free(q); } else { q=p; s=p->lchild; while(!s-rchild) { q=s; s=s->rchild; } p->data=s->data; if(q!=p) q->rchild=s->lchild; else q->lchild=s->lchild; free(s); } } Status InOrderBST(BiTree T) { if(T) InOrderBST(T->lchild); cout<<T->data.key<<" "; InOrderBST(T-rchild); } return true; } void main() { BiTree T=new BiTNode; T->lchild=T-rchild=NULL; ElemType e; for(e.key=1;e.key<20;e.key++) InsertBST(T,e); InOrderBST(T); system("pause"); }
相关文章推荐
- 二叉排序树的建立、插入、删除、查找、比较、4种遍历方式的C++完整实现版
- 二叉排序树的建立、插入、删除、查找、4种遍历 C++完整实现
- 二叉排序树的基本操作(建立,中序遍历,查找,删除,插入)
- 二叉排序树的查找、插入、删除、建立
- java实现二叉排序树的建立,查找,插入,删除
- 二叉排序树的操作(建立、插入、删除和查找)
- 循环单链表的初始化,建立,插入,查找,删除
- 二叉排序树的查找、插入和删除
- 单链表的初始化,建立,插入,查找,删除。
- 单链表的初始化,建立,插入,查找,删除
- 链队列的初始化,建立,插入,查找,删除。
- 单链表 建立, 查找, 删除, 插入 操作
- 二叉排序树的插入、查找、删除、遍历(C语言版)
- 单链表建立,插入,删除,查找,遍历操作
- 二叉查找树(二叉排序树)创建、插入、删除、查找-C语言
- 二叉排序树的查找、删除、插入
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- 双链表的初始化,建立,插入,查找,删除。
- 链栈的初始化,建立,插入,查找,删除。
- 线性表的操作(完成表的建立,插入,删除,排序,销毁,查找 )