二叉查詢樹 BST

2021-09-23 17:00:14 字數 1420 閱讀 5591

在二叉樹的基礎上進行修改。

每棵樹的左子樹上所有節點的權值小於(等於)根節點權值;右子樹上所有節點的權值大於根節點權值。

因此bst的建立,查詢,刪除,插入都是以權值驅動的。

此時,樹的深度h是比較重要的量。複雜度也以o(h)為主。

bst的刪除比較重要。刪除的處理可以將根右子樹中最小節點(右子樹中的最左的節點)改為根,亦可以將左子樹最大節點(左子樹中最右的節點)改為根。

#include#include#includeusing namespace std;

/*二叉樹

插入、搜尋、遍歷、刪除根節點

*/struct node

}; //列印二叉樹

void printbinarytree(node *root)

//此時是修改root本身的值,因此使用引用

void insert(node* &root, int val)

//權值小或相等,節點插入左子樹 ,否則插入右子樹

if(root->valuerchild,val);

} else

return;

} //利用已有的值建立一顆二叉樹

node* creatbst(int data, int num)

//先序遍歷 根,左子樹,右子樹

void pre_order(node*root)

//刪除根節點

void deletenode(node*&root)else if(root->rchild != null)

node*ftemp = root;

if(ftemp->rchild == temp)

else

ftemp->lchild = temp->rchild;

temp->lchild = root->lchild;

temp->rchild = root->rchild;

root = temp;

} return;

}else

node*ftemp = root;

if(ftemp->lchild == temp)

else

ftemp->rchild = temp->lchild;

temp->lchild = root->lchild;

temp->rchild = root->rchild;

root = temp;

} return; }}

int main();

node* root = creatbst(data,9);

pre_order(root);

cout<

cout<

cout<

deletenode(root);

pre_order(root);

}

二叉查詢樹 BST

當所有的靜態查詢結構新增和刪除乙個資料的時候,整個結構都需要重建。這對於常常需要在查詢過程中動態改變資料而言,是災難性的。因此人們就必須去尋找高效的動態查詢結構,我們在這討論乙個非常常用的動態查詢樹 二叉查詢樹。二叉查詢樹的特點 下面的圖就是兩棵二叉查詢樹,我們可以總結一下他的特點 1 若它的左子樹...

二叉查詢樹(BST)

二叉查詢樹,也稱為二叉排序樹,二叉搜尋樹。二叉查詢樹結合了鍊錶插入的靈活性和有序陣列查詢 二分查詢 的高效性。用二叉查詢樹實現有序符號表的api。public class bst,value 有序符號表的相關方法 public intsize private intsize node x publi...

二叉查詢樹BST

樹由node物件組成,每個物件有一對鍵值 兩條鏈結和乙個節點計數器n。每個node物件都是一棵含有n個節點的子樹的根節點,它的左鏈結指向一棵由小於該節點的所有鍵組成的二叉查詢樹,右鏈結指向一棵由大於該節點的所有鍵組成的二叉查詢樹。在bst類中,還應定義乙個node物件root,指向當前二叉樹的根節點...