搜尋二叉樹 插入 刪除)

2021-09-26 10:38:08 字數 1630 閱讀 3830

1.1搜尋二叉樹的概念

二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有一下性質的樹:

1.2二叉搜尋樹操作

1. 二叉搜尋樹的查詢

若根節點不為空:

否則,返回false

node*

find

(const k& key)

else

if(cur->_kv.first > kv.first)

else

}return nullptr;

}

2. 二叉樹的插入

//1.樹為空,則直接插入,返回true;

//2.樹不為空,按二叉搜尋樹性質查詢插入位置,插入新節點

若插入值小於根節點,則插入左子樹;若插入值大於根節點,則插入右子樹

bool insert

(const pair

& kv)

node* parent = nullptr;

node* cur = _root;

while

(cur)

else

if(cur->_kv.first < kv.first)

else

} cur = new node

(kv);if

(parent->_kv.first < kv.first)

else

return true;

}

3.二叉搜尋樹的刪除

首先查詢元素是否在二叉搜尋樹中,如果不存在,則返回,否則要刪除的節點可能分下面四種情況:

要刪除的節點無孩子節點

要刪除的節點只有左孩子節點

要刪除的節點只有右孩子節點

要刪除的節點有左、右孩子節點

bool remove

(const k& key)

else

if(cur->_kv.first > key)

else

else

else}}

else

if(cur->_right == nullptr)

else

else}}

else

cur->_kv = replace->_kv;

del = replace;

if(rpparent->_left == replace)

else

} delete del;

return true;}}

return false;

}

2.二叉樹的效能

插入和刪除都必須先查詢,查詢效率代表了二叉搜尋樹中各個操作的效能。

隊友n個節點的二叉搜尋樹,若每個元素查詢的概率相等,則二叉搜尋樹平均查詢長度是節點在二叉搜尋樹的深度的函式,即節點越深,則比較次數越多。

最優情況下,二叉搜尋樹為完全二叉樹,其平均比較次數為:log2(n)

最差情況下,二叉搜尋樹退化成單支樹,其平均比較次數為:n/2

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

二叉搜尋樹或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉搜尋樹。二叉搜尋樹的特點之一即是其中序遍歷為公升序。根據二叉搜尋樹的性質,每個結點的值都是大於其...

二叉樹 二叉搜尋樹建立 插入 刪除 查詢等操作

二叉搜尋樹性質如下 二叉搜尋樹篇 include include struct search tree typedef struct search tree typedef typedef struct search tree typedef stree node 向二叉搜尋樹插入乙個元素 int ...

二叉搜尋樹的插入 刪除

二叉搜尋樹 就是每乙個結點的data值,都大於它的所有左孩子的data,小於所有右孩子的data 二叉搜尋樹的插入刪除的模擬 pragma once namespace ljc template class t friend class binarysorttree template class t...