题目描述
输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。
输入描述:
输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
输出描述:
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。
输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。
分析
编写insert函数
#include <iostream>
using namespace std;
struct tree_node{
int data;
tree_node *left;
tree_node *right;
tree_node(int x):data(x), left(NULL), right(NULL){} //初始化一个结点
};
void insert(int x, tree_node *root){
if(x == root -> data) return;
if(x < root -> data){
if(!root -> left)//如果左边为空
root -> left = new tree_node(x);//则以x建立一个结点,并且插入左边
else
insert(x, root -> left);否则,左边不空,递归插入左子树
}else{
if(!root -> right)// 右子树为空
root -> right = new tree_node(x);// 直接插入右边
else
insert(x, root -> right);// 否则递归插入右子树
}
}
void pre_order(tree_node *root){
if(!root) return; // 树为空 直接返回
cout << root -> data << " ";//先序遍历,先输出根节点
pre_order(root -> left); //递归遍历左子树
pre_order(root -> right);// 递归遍历右子树
}
void in_order(tree_node *root){
if(!root) return;
in_order(root -> left);
cout << root -> data << " ";
in_order(root -> right);
}
void post_order(tree_node *root){
if(!root) return;
post_order(root -> left);
post_order(root -> right);
cout << root -> data << " ";
}
int main(){
int n;
while(cin >> n){
int x;
cin >> x;
tree_node root(x);
--n;
while(n--){
cin >> x;
insert(x, &root);
}
pre_order(&root); cout << endl;
in_order(&root); cout << endl;
post_order(&root);cout << endl;
}
return 0;
}