- 题目描述:
-
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
- 输入:
-
输入第一行包括一个整数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<stdio.h> struct Node { int val; Node* left; Node* right; Node(int a):val(a),left(NULL),right(NULL){}; }; void pre(Node *root) { if(NULL==root) return; printf("%d ",root->val); pre(root->left); pre(root->right); } void aft(Node *root) { if(NULL==root) return; aft(root->left); aft(root->right); printf("%d ",root->val); } void mid(Node *root) { if(NULL==root) return; mid(root->left); printf("%d ",root->val); mid(root->right); } void dele(Node *root) { if(NULL==root) return; dele(root->left); dele(root->right); delete(root); } int main() { int n; int val; Node *root; Node *p; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { scanf("%d",&val); if(i==0) { root = new Node(val); continue; } p = root; while(1) { if(val==p->val) break; if(val>p->val) { if(p->right==NULL) { p->right = new Node(val); break; } else { p = p->right; continue; } } else { if(p->left==NULL) { p->left = new Node(val); break; } else { p = p->left; continue; } } } } pre(root); printf(" "); mid(root); printf(" "); aft(root); printf(" "); dele(root); } return 0; }