模板 二叉搜尋樹

2021-08-10 04:30:30 字數 1038 閱讀 9903

二叉搜尋樹:對於二叉樹中的任意節點,左子樹中所有的值都小於當前位置的值,右子樹中所有的值都大於當前位置的值。

操作:1.插入乙個數值。

2.查詢是否包含某個數值。

3.刪除某個數值。

插入和查詢是差不多的,都是比當前值(要找的值)大就往左走,否則就往右走,直到找到為止。

最複雜的操作是刪除某個節點,不過可以分為3種情況來討論:

1.需要刪除的節點沒有左子樹,那就把右子樹提上去。

2.需要刪除的節點的左子樹沒有右子樹,那就把左子樹提上去。

3.其他情況,把左子樹中最大的節點提到當前刪除的節點的位置。

所有操作的時間複雜度都是o(log(n))。

還是比較高效的一種資料結構。

**:

#include

#include

#include

<

map>

#include

#include

<

set>

#include

#include

<

queue

>

using namespace std;

typedef long long ll;

#define inf 2147483647

//表示節點的結構體

struct node;

//如果小於當前節點往左走,否則往右走,直到走到空為止,把要插入的節點放在這。

//返回值意義是更新當前子樹,想象一下從最下層開始返回的情況。

node *insert(node *p,int x)else

}//查詢數值x。

//每乙個節點當做一棵子樹,如果當前節點不是就找它的左右子樹。

bool find(node *p,int x)

node *remove(node *p, int x)else

if(p->lch->rch ==

null)else

return p;

}int main()

二叉搜尋樹(模板)

題意 先給一組資料構建一顆二叉搜尋樹作為標準樹。緊跟著n組資料中,判斷每組 資料構成的二叉搜尋樹是否和標準樹yi一樣。思路 兩棵樹如果一樣的話,就是擁有一樣的節點,在每個節點上具有相同的值,且 在相同遍歷條件下,遍歷的順序是一樣的。因此我們可以在遍歷二叉樹的時候,每向 下移動乙個節點時,判斷是否與此...

模板 二叉搜尋樹

二叉搜尋樹 對於二叉樹中的任意節點,左子樹中所有的值都小於當前位置的值,右子樹中所有的值都大於當前位置的值。操作 1.插入乙個數值。2.查詢是否包含某個數值。3.刪除某個數值。插入和查詢是差不多的,都是比當前值 要找的值 大就往左走,否則就往右走,直到找到為止。最複雜的操作是刪除某個節點,不過可以分...

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...