SDUT 2128 树结构练习——排序二叉树的中序遍历
2017-11-10 20:48
260 查看
树结构练习——排序二叉树的中序遍历
Time Limit: 1000MSMemory Limit: 65536KB
Submit
Statistic
Discuss
Problem Description
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。Input
输入包含多组数据,每组数据格式如下。第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。Example Input
1 2 2 1 20
Example Output
2 1 20
Hint
#include<cstdio> #include<cstring> #include<cstdlib> using namespace std; typedef struct node { int data; struct node *l; struct node *r; }BTnode; BTnode *root; int num[1005],cnt; BTnode *Create(int x,BTnode *root) { if(root==NULL) { root=(BTnode *)malloc(sizeof(BTnode)); root->data=x; root->l=root->r=NULL; return root; } if(x<root->data)//比父节点小则放入左子树 root->l=Create(x,root->l); else//比父节点大则放入右子树 root->r=Create(x,root->r); return root;//这里的return不同于if里的,这里终止递归,否则爆栈,不可少 } void Inorder(BTnode *root) { if(root!=NULL) { Inorder(root->l); num[++cnt]=root->data; Inorder(root->r); } } int main() { int n,x; while(scanf("%d",&n)!=EOF) { root=NULL; for(int i=0;i<n;i++) { scanf("%d",&x); root=Create(x,root); } cnt=-1; Inorder(root); for(int i=0;i<n;i++) { if(i==n-1) printf("%d\n",num[i]); else printf("%d ",num[i]); } } return 0; }
相关文章推荐
- SDUT 2128 树结构练习 排序二叉树的中序遍历
- sdut 2128 树结构练习——排序二叉树(BST)的中序遍历
- SDUT 2128 树结构练习——排序二叉树的中序遍历
- SDUT 2128 树结构练习——排序二叉树的中序遍历
- SDUT 2128 树结构练习——排序二叉树的中序遍历
- SDUT2128树结构练习——排序二叉树的中序遍历
- OJ2128树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历(sdut_2128)
- 树结构练习——排序二叉树的中序遍历---2128
- SDUTOJ(2128)树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历 SDUT
- SDUTOJ 2128 树结构练习——排序二叉树的中序遍历
- SDUTOJ 2128 树结构练习——排序二叉树的中序遍历
- SDUT-树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历(二叉搜索树)
- 树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历