二叉排序树(三序输出)
二叉排序树
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:6039
解决:2538
- 题目描述:
-
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
- 输入:
-
输入第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数。
- 输出:
-
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。 每种遍历结果输出一行。每行最后一个数据之后有一个空格。
- 样例输入:
-
5 1 6 5 9 8
- 样例输出:
-
1 6 5 9 8 1 5 6 8 9 5 8 9 6 1
- 提示:
-
输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; typedef struct Node{ Node *l, *r; int v; Node(){l = NULL; r = NULL;} }*tree, Node; tree build(tree p, int v){ if(p == NULL){ p = new Node(); p->v = v; return p; } if(v < p->v) p->l = build(p->l, v); else if(v > p->v) p->r = build(p->r, v); else return p; return p; } void PreOrder(tree p){ if(p == NULL)return; printf("%d ", p->v); PreOrder(p->l); PreOrder(p->r); } void InOrder(tree p){ if(p == NULL)return; InOrder(p->l); printf("%d ", p->v); InOrder(p->r); } void PostOrder(tree p){ if(p == NULL)return; PostOrder(p->l); PostOrder(p->r); printf("%d ", p->v); } int main(){ int N; while(~scanf("%d", &N)){ tree p; p = NULL; int v; for(int i = 0; i < N; i++){ scanf("%d", &v); p = build(p, v); } PreOrder(p); puts(""); InOrder(p); puts(""); PostOrder(p); puts(""); } return 0; }