二叉查詢樹(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,它的左右子樹也分為二叉排序樹 插入操作 將待插入的新結點與當前結點進行比較,如果兩個結點的值相同,則表...