首页 > 代码库 > 二叉排序树
二叉排序树
Time Limit: 1000MS Memory limit: 65536K
题目描述
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
输入
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
输出
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
示例输入
1 2 2 1 20
示例输出
2 1 20
恩 。。建树方式很简单,一开始sb想多了
#include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <string> #include <cctype> #include <vector> #include <cstdio> #include <cmath> #include <deque> #include <stack> #include <map> #include <set> #define ll long long #define maxn 1010 #define pp pair<int,int> #define INF 0x3f3f3f3f #define max(x,y) ( ((x) > (y)) ? (x) : (y) ) #define min(x,y) ( ((x) > (y)) ? (y) : (x) ) using namespace std; typedef struct node { int d; node *l,*r; }*p; int n,sb; void Insert(p &T,int x) { if(T==NULL) { T=new node; T->l=NULL;T->r=NULL; T->d=x; } else { if(x<T->d) Insert(T->l,x); else Insert(T->r,x); } } void in(p T) { if(T) { in(T->l); if(!sb) { printf("%d",T->d); ++sb; } else printf(" %d",T->d); in(T->r); } } int main() { while(~scanf("%d",&n)) { p root=NULL;int x; for(int i=0;i<n;i++) { scanf("%d",&x); Insert(root,x); } sb=0; in(root);puts(""); } return 0; }
二叉排序树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。