二叉排序树
标签: 机试攻略 - 高分篇
学习人数: 18.2k


高清播放
赞赏支持

二叉排序树有两种考法

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 二叉排序树 - 华科


登录后开始许愿

2 条上岸许愿
orderrr
2024年3月28日 14:25

给我上岸,30面试,面一整天就结束啦。加油

赞(0)
2020282107
2024年3月7日 17:55

一战上岸!!复试必过!!

赞(1)