题目: 二叉排序树的遍历
问题描述
输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。
输入格式
输入第一行包括一个整数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
样例说明
无。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
int key;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
int InsertBST(BiTree* T, int key);
void PerOrderTraverse(BiTree T);
void InOrderTraverse(BiTree T);
void PostOrderTraverse(BiTree T);
int main()
{
int n;
int tree[100];
int i, j, k;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &tree[i]);
BiTree T = NULL;
for (i = 0; i < n; i++)
InsertBST(&T, tree[i]);
PerOrderTraverse(T);
printf("\n");
InOrderTraverse(T);
printf("\n");
PostOrderTraverse(T);
return 0;
}
int InsertBST(BiTree* T, int key)
{
if (*T == NULL)
{
(*T) = (BiTree)malloc(sizeof(BiTNode));
(*T)->key = key;
(*T)->lchild = (*T)->rchild = NULL;
return 1;
}
else if (key == (*T)->key)
return 0;
else if (key < (*T)->key)
return InsertBST(&(*T)->lchild, key);
else
return InsertBST(&(*T)->rchild, key);
}
void PerOrderTraverse(BiTree T)
{
if (T != NULL)
{
printf("%d ", T->key);
PerOrderTraverse(T->lchild);
PerOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{
if (T != NULL)
{
InOrderTraverse(T->lchild);
printf("%d ", T->key);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{
if (T != NULL)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%d ", T->key);
}
}