数据结构上机实验-二叉排序树的创建
2015-12-06 19:12
686 查看
二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。
二叉排序树经过中序遍历之后可得到递增序列。
本代码参考2005年华中科技大学计算机保研机试真题
二叉排序树
二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。
二叉排序树经过中序遍历之后可得到递增序列。
本代码参考2005年华中科技大学计算机保研机试真题
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef struct node { int key; struct node *l,*r; }bstnode; int bstinsert(bstnode *&p,int k) { if(p==NULL) { p=new bstnode(); p->key=k; p->l=p->r=NULL; return 1; } else if(k==p->key)//去重 return 0; else if(k<p->key) return bstinsert(p->l,k); else return bstinsert(p->r,k); } void build(bstnode *&bt,int *str,int n) { bt=NULL; for(int i=0;i<=n-1;i++) { bstinsert(bt,str[i]);//每次插入都从树头开始 } } void preorder(bstnode *bt) { if(bt!=NULL) { printf("%d ",bt->key); preorder(bt->l); preorder(bt->r); } } void inorder(bstnode *bt) { if(bt!=NULL) { inorder(bt->l); printf("%d ",bt->key); inorder(bt->r); } } void posorder(bstnode *bt) { if(bt!=NULL) { posorder(bt->l); posorder(bt->r); printf("%d ",bt->key); } } int main() { int n; int num[10120]; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { scanf("%d",&num[i]); } bstnode *nd=new bstnode(); build(nd,num,n); preorder(nd); printf("\n"); inorder(nd); printf("\n"); posorder(nd); printf("\n"); } return 0; }
相关文章推荐
- 如何进行程序设计?
- 第十二周--数据结构-图的遍历之广度优先遍历求解问题
- BestCoder Round #65 HDU 5592 ZYB's Premutation (数据结构查询第K大)
- splay区间翻转及删除区间,平移区间
- Java数据结构
- 数据结构实验之查找七:线性之哈希表
- 数据结构C++实现——二叉树
- 数据结构实验之查找五:平方之哈希表
- 《奥赛经典——数据结构篇》 3.4队列习题
- 【ShancoLove】带你看数据结构——第十三课:学生成绩管理系统
- 数据结构——线性表
- 2015年大二上-数据结构-串(4)- 字符串加密
- 2015年大二上-数据结构-串(3)- 顺序串算法
- 数据结构绪论
- 链表反转
- 数据结构上机测试4.1:二叉树的遍历与应用1
- 数据结构实验之查找二:平衡二叉树
- 数据结构——各排序算法的比较
- 数据结构——二分查找【转】
- 【数据结构实验】哈夫曼编/译码