二叉查詢樹

2021-09-23 15:25:27 字數 2527 閱讀 7299

三、拓展

二叉查詢樹(binary search tree),又被稱為二叉搜尋樹。在二叉樹中有乙個節點x

xx,假設它有左子樹l

ll和右子樹r

rr,則一定有:

v al

ue[l

]lue[

x]且v

alue

[r]>va

lue[

r]value[l]value[r]

value[

l]lue[

x]且v

alue

[r]>va

lue[

r]。官方解釋為:

};2.2.1查詢

非遞迴版本

/*非遞迴版本,十分簡單

*/bsnode

*help

(bsnode

* x, t key)

const

return x;

}bsnode

* bsnode

::search

(t key)

//

遞迴版本

/*遞迴版本,十分簡單

*/bsnode

*help

(bsnode

* x, t key)

const

bsnode

* bsnode

::search

(t key)

//

2.2.2插入和刪除

插入任意乙個與二叉樹中元素不等的節點:

void

help

(bsnode

*&treeroot,bsnode

* x)

x->parent=temp;

//判斷新增到左子樹還是右子樹

if(x-

>key < temp-

>key)

temp-

>left = x;

else

temp-

>right = x;

}void

insert

(bsnode

* x)

刪除節點:

//只有右子樹

else

}else

if(x-

>left ==

null

&& x-

>right ==

null

)//第二種情況:被刪除節點是葉節點(最簡單)

else

//第三種情況:被刪除節點有兩個子節點

x->key = cur***ther-

>left-

>key;

//將右子樹中最小值賦值給要刪除節點

if(cur***ther-

>lef-

>right!=

null

)delete cur***ther-

>left;}}

void

remove

(t key)}}

void

remove

(t key)

}2.2.3前序、中序和後序遍歷

前序遍歷:中->左->右

/*遞迴版本十分簡單

*/void

preorder

(bsnode

*&tree)

const

}

中序遍歷:左->中->右

/*遞迴版本十分簡單

*/void

inorder

(bsnode

*&tree)

const

}

後序遍歷:左->右->中

/*遞迴版本十分簡單

*/void

postorder

(bsnode

*&tree)

const

}

請看我對力扣二叉搜尋樹題解相關分析。

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

樹(樹,二叉樹,二叉查詢樹)

1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...