树结构练习——排序二叉树的中序遍历
2015-08-18 15:31
671 查看
树结构练习——排序二叉树的中序遍历
题目描述
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。输入
输入包含多组数据,每组数据格式如下。第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
输出
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。示例输入
1 2 2 1 20
示例输出
2 1 20
#include <bits/stdc++.h> using namespace std; struct node { int data; struct node *right,*left; }; int n; //一切都是用的递归调用,代码看来很简单,但是不大好理解 struct node *creat( struct node *&root,int m) { if(root ==NULL) { root =new node ; root->right=NULL; root->left=NULL; root->data=m; } else { if(m<root->data) { creat(root->left,m); //建立左分支 } else { creat (root->right,m); //建立右分支 } } } int flag=0; void mid( struct node *root) { if(root!=NULL) { mid(root->left); //输出左分支的点 if(flag==0) { flag=1; printf("%d",root->data); //flag用于保证输出格式的正确性 } else { printf(" %d",root->data); } mid(root->right); //递归输出右分支的点 } } int main() { while(scanf("%d",&n)!=EOF) { flag=0; int m; struct node *root=NULL; for(int i=0; i<n; i++) { scanf("%d",&m); creat(root,m); } mid(root); cout<<endl; } }
相关文章推荐
- 判断大小端
- 【JS/读书随笔】JavaScript编程精解/Eloquent JavaScript:Chapter 5 函数式编程
- FZU2129 子序列个数 DP
- 线程Looper+Handler+Thread学习
- Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)
- CentOS6.6源码安装MySQL
- 使用PHP和JavaScript判断请求是否来自微信内浏览器
- puppet进阶指南——file资源详解
- puppet进阶指南——file资源详解
- puppet进阶指南——file资源详解
- Number of Digit One
- symbolicatecrash工具
- poj 2135 Farm Tour(最小费用流)
- [转]WebView使用
- Sqoop相关
- PAT 1043. Is It a Binary Search Tree (25)
- POJ 2676 Sudoku(DFS)
- HDU5001 Walk
- 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法
- samoa简单介绍