模板 二叉搜尋樹

2022-04-21 17:10:17 字數 997 閱讀 5036

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

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

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

3.刪除某個數值。

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

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

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

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

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

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

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

**:

#include #include 

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;#define inf 2147483647

//表示節點的結構體

struct

node;

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

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

node *insert(node *p,int

x)else}//

查詢數值x。

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

bool find(node *p,intx)

node *remove(node *p, int

x)else

if(p->lch->rch ==null)

else

returnp;}

intmain()

模板 二叉搜尋樹

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

二叉搜尋樹(模板)

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

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 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...