二叉搜尋樹:對於二叉樹中的任意節點,左子樹中所有的值都小於當前位置的值,右子樹中所有的值都大於當前位置的值。
操作: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...