C 資料結構之二叉查詢樹 二十五

2021-09-29 04:42:40 字數 2226 閱讀 5137

參考了獵豹網校

引用部落格:二叉查詢樹與平衡二叉樹

二叉查詢樹的插入演算法比較簡單:空樹,就首先生成根節點;不是空樹就按照查詢的演算法,找到父節點,然後作為葉子節點插入,如果值已經存在就插入失敗。

刪除操作稍微複雜一點,有如下幾種情況:

​ (1)如果刪除的是葉節點,可以直接刪除;

​ (2)如果被刪除的元素有乙個子節點,可以將子節點直接移到被刪除元素的位置;

​ (3)如果有兩個子節點,這時候就採用中序遍歷,找到待刪除的節點的後繼節點,將其與待刪除的節點互換,此時待刪除節點的位置已經是葉子節點,可以直接刪除。

mai.cpp

#include

#include

"bst.h"

using

namespace std;

intmain()

bst.h

#pragma once

#ifndef bst_h

#define bst_h

enum boolean

;template

<

class

type

>

class

element

;template

<

class

type

>

class

bst;

//前置宣告

template

<

class

type

>

class

bstnode

//樹節點

;template

<

class

type

>

class

bst boolean insert

(const element

& x)

; bstnode

*search

(const element

& x)

; bstnode

*search

(bstnode*,

const element&)

; bstnode

*itersearch

(const element&)

;void

display()

private

: bstnode

*root;};

template

<

class

type

>

void bstnode

::display

(int i)

template

<

class

type

>

boolean bst

::insert

(const element

&x)//找到的位置就是q

p =new bstnode

; p-

>leftchild = p-

>rightchild =0;

p->data = x;if(

!root) root = p;

else

if(x.key < q-

>data.key) q-

>leftchild = p;

else q-

>rightchild = p;

return true;

}template

<

class

type

>

bstnode

* bst

::search

(const element

&x)template

<

class

type

>

bstnode

* bst

::search

(bstnode

* b,

const element

&x)template

<

class

type

>

bstnode

* bst

::itersearch

(const element

&x)return0;

}#endif

資料結構之二叉查詢樹

針對二叉查詢樹的操作 增刪改查 的時間和樹的高度成正比,比如都有10個節點的乙個樹,樹高為4和樹高為10的操作時間肯定是不同的,這個時間實際上是o lgn 二叉查詢樹的期望的樹高是lgn,從而基本動態集合的操作平均時間為 lgn 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...

資料結構之二叉查詢樹

二叉樹成為二叉查詢樹的性質是,對於樹種的每個節點x,他的左子樹中的所有關鍵字的值均小於x的關鍵字的值,而他的右子樹中的所有關鍵字的值均大於x的關鍵字的值。這意味著,該樹的所有元素均可以是用某種統一的方式排序。tree.h pragma once we define the binary tree.s...

資料結構之二叉查詢樹

二叉查詢樹 binary search tree 又被稱為二叉搜尋樹。設x為二叉查詢樹中的乙個結點,x節點包含關鍵字key,節點x的key值記為 ke y x k ey x 如果y是x的左子樹中的乙個結點,則 ke y y ke y x k ey y ke y x 如果y是x的右子樹的乙個結點,則 ...