二叉排序树有两种考法
1、考察定义的理解,根据定义建立二叉排序树,然后输出其先序、中序、后序。
2、考察二叉排序树的应用,例如多次查找,建立二叉排序树之后将查找的复杂度从线性降低到log级别。对于可以使用C++的同学而言,直接用前面讲过的map即可,对于只能使用C语言的同学而言,掌握二叉排序可以解决大量的查找类问题。
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
定义
一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
二叉排序树2
题目描述:
输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。
输入描述:
输入第一行包括一个整数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
题目来源:
DreamJudge 1411
题目解析:根据二叉排序的定义将所有元素插入到二叉排序树中,然后分别输出这颗二叉排序树的先序遍历、中序遍历、后序遍历。
参考代码
#include <bits/stdc++.h>
using namespace std;
typedef struct node{
int data;
struct node *lchild,*rchild;
}*BitTree;
//将元素插入二叉排序树中
void InsertBitTree(BitTree &T, int x) {
if (T == NULL) {
T = new node;
T->data = x;
T->lchild = NULL;
T->rchild = NULL;
return;
}
if (x == T->data) return;
else if (x < T->data) InsertBitTree(T->lchild, x);
else InsertBitTree(T->rchild, x);
}
//将二叉树按照先序输出
void PreOrderTraverse(BitTree T) {
if (T != NULL) {
cout << T->data << ' ';
PreOrder...
练习题目
DreamJudge 1317 二叉搜索树
DreamJudge 1396 二叉排序树 - 华科
登录后开始许愿
给我上岸,30面试,面一整天就结束啦。加油
一战上岸!!复试必过!!