首页 / 更多教程 / 数据结构 二叉排序树 操作及实现
数据结构 二叉排序树 操作及实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了数据结构 二叉排序树 操作及实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2212字,纯文字阅读大概需要4分钟。
内容图文
![数据结构 二叉排序树 操作及实现](/upload/InfoBanner/zyjiaocheng/1056/0be522fcc31f43c5898601f3f8d9df8f.jpg)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; typedef struct Bitnode { int data; struct Bitnode *lchild,*rchild; } Bitnode,*Bitree; int Searchtree(Bitree T,int num,Bitree F,Bitree &P) //在二叉树T种查找元素num F表示前驱 P表示num元素所在的节点 { if(T==NULL) //未找到该元素 { P=F; //p表示num元素应当在的位置的前驱 return 0; } else if(T->data==num) { P=T; return 1; } else if(T->data<=num) Searchtree(T->rchild,num,T,P); else Searchtree(T->lchild,num,T,P); } void print_in(Bitree &T) //中序遍历排序二叉树 { if(T!=NULL) { print_in(T->lchild); printf("%d ",T->data); print_in(T->rchild); } return; } void insertTree(Bitree &T,int num) //在二叉排序树T中插入元素NUM { Bitree P,s; int flag=Searchtree(T,num,NULL,P); if(flag==0) { s=(Bitree)malloc(sizeof(Bitnode)); s->data=num; s->lchild=NULL; s->rchild=NULL; if(T==NULL) T=s; else if(num<P->data) P->lchild=s; else P->rchild=s; } return; } void deletenode(Bitree &T) //删除该节点 { Bitree q,s; if(T->rchild==NULL) { q=T; T=T->lchild; free(q); } else if(T->lchild==NULL) { q=T; T=T->rchild; free(q); } else { q=T; s=q->lchild; while(s->rchild) { q=s; s=s->rchild; } T->data=s->data; if(T==q) //T=q 表示 while循环没有运行 T的左儿子的右子树没有节点 q->lchild=s->lchild; else q->rchild=s->lchild; free(s); } return; } void Deletetree(Bitree &T,int num) //在树种删除元素num { if(T==NULL) return; if(T->data<num) Deletetree(T->rchild,num); else if(T->data>num) Deletetree(T->lchild,num); else //找到同样的节点 删除节点操作 { // cout<<111<<endl; deletenode(T); } return; } int main() { int m,n,k; int a; Bitree T=NULL; Bitree q; int i,j; printf("输入n个元素和k次查找操作和m次删除操作:\n"); scanf("%d%d%d",&n,&k,&m); while(n--) { int num; scanf("%d",&num); insertTree(T,num); } printf("中序遍历结果\n"); print_in(T); cout<<endl; while(k--) { printf("请输入要查找的元素:\n"); scanf("%d",&a); int ans=Searchtree(T,a,NULL,q); cout<<ans<<endl; } while(m--) { printf("请输入要删除的元素:\n"); scanf("%d",&a); Deletetree(T,a); print_in(T); cout<<endl; } return 0; } 測试数据: 8 3 3 5 7 8 9 10 15 3 1 9 2 5 10 1 15
原文:http://www.cnblogs.com/clnchanpin/p/7086424.html
内容总结
以上是互联网集市为您收集整理的数据结构 二叉排序树 操作及实现全部内容,希望文章能够帮你解决数据结构 二叉排序树 操作及实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。