首页 > 其他 > 详细

二叉查找树(Binary Search Tree)

时间:2014-03-29 11:39:18      阅读:449      评论:0      收藏:0      [点我收藏+]

二叉查找树Binary Search Tree

二叉查找树Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树

  1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 任意节点的左、右子树也分别为二叉查找树。
  4. 没有键值相等的节点(no duplicate nodes)。

二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为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

二叉查找树(Binary Search Tree)

原文:http://www.cnblogs.com/seair/p/3630953.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!