二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:
二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、multiset、关联数组等。
二叉查找树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉查找树的存储结构。中序遍历二叉查找树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉查找树变成一个有序序列,构造树的过程即为对无序序列进行查找的过程。每次插入的新的结点都是二叉查找树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索,插入,删除的复杂度等于树高,期望O(log n),最坏O(n)(数列有序,树退化成线性表).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 |
#include<iostream> using
namespace std; typedef
int Type; typedef
struct node{ Type data; struct
node * left; struct
node * right; }BinaryTree; void
findInsertNode(BinaryTree *bt,Type data){ BinaryTree *point=bt; int
FlagL=0,FlagR=0; while (point){ //若有子节点继续查找,若没有就退出,然后插值 if (data>point->data) if (point->right) point=point->right; else {FlagR=1; break ;} else if (point->left) point=point->left; else {FlagL=1; break ;} } BinaryTree *node= new
BinaryTree(); node->data=data; node->left=0; node->right=0; if (FlagR) point->right=node; else point->left=node; } BinaryTree * createSortBT(Type data[], int
length){ BinaryTree *bt= new
BinaryTree(); bt->left=0; bt->right=0; int
i=0; while (i<length){ if (0 == i) bt->data=data[i++]; //创建根 else { findInsertNode(bt,data[i++]); //创建叶子 } } return
bt; } /*中序遍历二叉树bt*/ void
PreOrder(BinaryTree * bt) { if
(bt==0) return ; PreOrder(bt->left); cout<<bt->data<< " " ; PreOrder(bt->right); } int
main(){ Type data[8]={5,4,6,2,10,7,9,8}; BinaryTree *bt=createSortBT(data,8); PreOrder(bt); getchar (); return
0; } |
二叉查找树(Binary Search Tree),布布扣,bubuko.com
原文:http://www.cnblogs.com/seair/p/3630953.html