二叉查找樹(Binary Search Tree),也稱有序二叉樹(ordered binary tree),排序二叉樹(sorted binary tree),是指一棵空樹或者具備下列性質的二叉樹:php
二叉查找樹相比於其餘數據結構的優點在於查找、插入的時間複雜度較低。爲O(log n)。二叉查找樹是基礎性數據結構,用於構建更爲抽象的數據結構,如集合、multiset、關聯數組等。node
二叉查找樹的查找過程和次優二叉樹相似,一般採起二叉鏈表做爲二叉查找樹的存儲結構。中序遍歷二叉查找樹可獲得一個關鍵字的有序序列,一個無序序列能夠經過構造一棵二叉查找樹變成一個有序序列,構造樹的過程即爲對無序序列進行查找的過程。每次插入的新的結點都是二叉查找樹上新的葉子結點,在進行插入操做時,沒必要移動其它結點,只需改動某個結點的指針,由空變爲非空便可。搜索,插入,刪除的複雜度等於樹高,指望O(log n),最壞O(n)(數列有序,樹退化成線性表).ios
#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 InOrder(BinaryTree * bt) { if (bt==0) return; InOrder(bt->left); cout<<bt->data<<" "; InOrder(bt->right); } int main(){ Type data[8]={5,4,6,2,10,7,9,8}; BinaryTree *bt=createSortBT(data,8); InOrder(bt); getchar(); return 0; }