二叉排序树[2005年华中科技大学计算机保研机试真题]

本文详细介绍了一种基于二叉排序树的数据结构实现及其前序、中序和后序遍历算法。通过输入一系列整数,文章展示了如何构建二叉排序树,并提供了具体的遍历示例,帮助读者深入理解二叉树的性质和遍历过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:
输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。
输入:
输入第一行包括一个整数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
提示:
输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。
来源:
2005年华中科技大学计算机保研机试真题

解题思路: 一下子复习了三种遍历树方式, 和二叉搜索树的建立。

#include<bits/stdc++.h>
using namespace std;  

struct Node{
	Node* lchild;
	Node* rchild;
	int data;
}Tree[101];
int loc;
Node *creat(){
	Tree[loc].lchild = Tree[loc].rchild = NULL;
	return &Tree[loc++]; 
}
void postOrder(Node *T){//后序 
	if(T->lchild) postOrder(T->lchild);
	if(T->rchild) postOrder(T->rchild);
	cout << T->data << ' ';
}
void inOrder(Node *T){//中序 
	if(T->lchild) inOrder(T->lchild);
	cout << T->data << ' ';
	if(T->rchild) inOrder(T->rchild);
}
void preOrder(Node *T){//前序 
	cout << T->data << ' ';
	if(T->lchild) preOrder(T->lchild);
	if(T->rchild) preOrder(T->rchild);
}
Node *Insert(Node *T, int x){
	if(T==NULL){
		T = creat();
		T->data = x;//插入结点内容
		return T; 
	}
	else if(x<T->data) T->lchild = Insert(T->lchild,x);//插入到左子树 
	else if(x>T->data) T->rchild = Insert(T->rchild,x);//插入到右子树
	return T; 
} 

int main(){
	int n;
	while(scanf("%d", &n)!=EOF){
		loc = 0;
		Node *T = NULL;//二叉树根结点为空;
		for(int i=0; i<n; i++){
			int x;
			cin >> x;
			T = Insert(T,x);//插入到排序树中 
		} 
		preOrder(T);
		cout << endl;
		inOrder(T);
		cout << endl;
		postOrder(T);
		cout << endl;
	}
	return 0;
}

本题在线测试入口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值