BST(二叉排序樹)

2021-09-30 20:23:03 字數 2638 閱讀 7001

二叉查詢樹(binary search tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

查詢二叉搜尋樹:

遞迴的:

tree_search(x,k)

if(x==null || k==x.key) 

return x;

else

return tree_search(x.left,k)

else return tree_search(x.right,k);                   //o(h) h是這個樹的高度

用迴圈的:

tree_srarch(x,k)

while(x!=null && x!=x.key)

teturn x;

插入:

(思想,用兩個指標,因為最後要找到插入節點的雙親。)

演算法分析:

要將乙個新值v插入到一顆二叉搜尋樹t中,需要呼叫過程tree_insert,該過程以節點z作為輸入,其中z.key=v;

z.left=null,z.right=null,,,,,,這個過程要修改t和z的某些屬性,來把z插入到樹中的相應位置上

tree_insert(t,x)

y=null   //y 是乙個節點

x=t.root

while(x!=null)

y=x;

if(z.keyx=x.left;

else

x=x.right;

z.p=y;

if(y==null)

t.root==z        //空樹

else  if (z.keyy.left=z;

else 

y.right=z;

源**:

#include

using namespace std;

typedef int keytype;

typedef struct bstnode

bstnode;

typedef struct

bstree;

bstnode * buynode(bstnode *pa = null,bstnode *left=null,bstnode *right = null)

void freenode(bstnode *p)

void initbstree(bstree &bt)

//迴圈的查詢

bstnode * findvalue(bstree &bt,keytype kx)

return p;

}//遞迴的查詢

bstnode * search(bstnode *ptr,keytype kx)

bstnode * searchvalue(bstree &bt,keytype kx)

//插入節點

bool insertitem(bstree &bt,keytype kx)

if(p != null) return false;

p = buynode(pa);

p->data = kx;

if(pa == bt.head)

else

}else}}

bt.cursize+=1;

return true;

}void inorder(bstnode *p)

}void inorder(bstree &bt)

bstnode * first(bstnode *ptr)

return ptr;

}bstnode * next(bstree &bt,bstnode *ptr)

else

if(pa == bt.head)

return pa;}}

void niceinorder(bstree &bt)

cout<}

int getsize(bstree &bt)

bool empty(bstree &bt) 

//刪除節點

bool removeitem(bstree &bt,keytype kx)

// leaf brch

bstnode *pa = p->parent;

bstnode *child = p->leftchild != null? p->leftchild: p->rightchild;

if(child != null) child->parent = pa;

if(pa == bt.head)

else

else

}freenode(p);

bt.cursize-=1;

return true;

}int main()

;int n = sizeof(ar)/sizeof(ar[0]);

int x = 0;

bstree myt;

initbstree(myt);

for(int i = 0;i

niceinorder(myt);

//resniceinorder(myt);

while(cin>>x , x != -1)

return 0;

}

二叉排序樹BST

二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。二叉排序樹的性質 左子樹上所有結點的值均小於或等於它的根結點的值 右子樹上所有結點的值均大於或等於它的根結點的值 左 右子樹也分別為二叉排序樹 如圖是乙個bst。有了這種性質,bst的...

二叉排序樹 BST

二叉排序樹,又叫二叉查詢樹,它或者是一棵空樹 或者是具有以下性質的二叉樹 1.若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2.若它的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3.它的左右子樹也分別為二叉排序樹。1.1 排序二叉樹之插入操作 已知乙個關鍵字值為key的結...

二叉排序樹 BST

二叉排序樹,又稱為二叉查詢樹或者二叉搜尋樹.二叉查詢樹為滿足以下條件的樹 1,若左子樹不為空,則左子樹上所有結點的值均小於根結點的值 2,若右子樹不為空,則右子樹上所有結點的值均大於根結點的值 3,它的左右子樹也分為二叉排序樹 插入操作 將待插入的新結點與當前結點進行比較,如果兩個結點的值相同,則表...