二叉搜尋樹 BST 的查詢 插入 刪除操作

2021-10-08 02:39:34 字數 1502 閱讀 5392

定義二叉搜尋樹又叫二叉排序樹或二叉查詢樹,它是一棵空樹或者是具有以下性質的樹:

1.節點的左子樹只包含小於當前節點的數。

2.節點的右子樹只包含大於當前節點的數。

3.所有左子樹和右子樹自身必須也是二叉搜尋樹。

二叉搜尋樹的中序遍歷是有序的。

二叉樹結構體:

struct node

};

查詢操作:

node*

searchbst

(node *root,

int key, node *f)

//root為當前節點,key為鍵值,f為當前節點的前繼,初始為null

if(root-

>data == key)

else

if(root-

>data > key)

else

}

插入操作:

node*

insertbst

(node *root,

int key)

else

if(key < p-

>data)

else

if(key > p-

>data)

return root;

}

刪除操作:

刪除分為幾種情況:

1.葉子節點。

2.僅有左子樹或右子樹的節點。

3.既有左子樹又有右子樹的節點。

對於第一種情況,只需刪除該節點然後將雙親節點對應指向置空。第二種情況將該節點用對應的左孩子或有孩子代替。第三種情況,應找到該節點中序遍歷的前繼或者後繼,並用其替代。

void

delete

(node *p, node *f)

//p為當前節點,f為p的前繼

else

if(p-

>left &&

!p->right)

elseif(

!p->left && p-

>right)

else

p->data = s-

>data;

if(p != q)

else

delete s;}}

void

deletebst

(node *root, node *f,

int key)

//和查詢差不多

else

if(key < root-

>data)

else

}}

二叉搜尋樹的插入,查詢,刪除

include using namespace std template class node 預設析構函式 templatenode node template node node t value template class bstree 預設析構 void buildbstree 建立二叉樹 ...

二叉搜尋樹的查詢 插入 刪除

coding utf 8 time 2020 9 23 15 56 author julyli file bst.py class bitreenode def init self,data self.data data self.lchild none self.rchild none self....

二叉搜尋樹的插入 刪除 查詢

1 若左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2 若右子樹不空,則右子樹上所有節點的值均大於它的根節點的值 3 左 右子樹也分別為二叉排序樹 4 沒有鍵值相等的節點 插入的資料之後要滿足二叉樹的性質1和2,所以要先找到插入位置,且插入的位置一定是在葉子節點的下面 所以插入分兩個步驟 ...