SDUT 2128 树结构练习 排序二叉树的中序遍历
2018-03-13 10:55
232 查看
排序二叉树的中序遍历
题目
Problem Description在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
Input
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
Sample Input
1
2
2
1 20
Sample Output
2
1 20
代码&分析
排序二叉树的概念很简单,相比较一个节点,比它的key小就放在左边,反之就放在右边,这个题应注意题目没有提到重复数据如何处理,测试数据里是有重复数字的,我们把它改为右边的节点的key大于等于父节点的key。#include<stdio.h> #include<stdlib.h> #include<algorithm> #include<iostream> using namespace std; typedef struct node{ int data; struct node *left; struct node *right; }Node, *Tree; bool flag = false; void Create(Tree &T, int key){ if(T==NULL){ T=(Tree)malloc(sizeof(Node)); T->data = key; T->left = NULL; T->right = NULL; } else if(key < T->data){ Create(T->left, key); } else{ //key>=T->data Create(T->right, key); } } void Inorder(Tree T){ if(T){ Inorder(T->left); if(flag) cout<<" "; cout<<T->data; flag = true; Inorder(T->right); } } int main(){ int n; int num; while(cin>>n){ Tree t = NULL; for(int i=0; i<n; i++){ cin>>num; Create(t, num); } flag = false; Inorder(t); cout<<endl; } }
相关文章推荐
- SDUT 2128 树结构练习——排序二叉树的中序遍历
- SDUT 2128 树结构练习——排序二叉树的中序遍历
- SDUT 2128 树结构练习——排序二叉树的中序遍历
- SDUT2128树结构练习——排序二叉树的中序遍历
- sdut 2128 树结构练习——排序二叉树(BST)的中序遍历
- SDUT 2128 树结构练习——排序二叉树的中序遍历
- SDUTOJ 2128 树结构练习——排序二叉树的中序遍历
- SDUT-树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历---2128
- SDUTOJ 2128 树结构练习——排序二叉树的中序遍历
- SDUTOJ(2128)树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历 SDUT
- OJ2128树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历(sdut_2128)
- 树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历
- SDUT OJ 树结构练习——排序二叉树的中序遍历
- 树结构练习——排序二叉树的中序遍历 分类: 树 2015-06-21 11:05 12人阅读 评论(0) 收藏
- 树结构练习——排序二叉树的中序遍历