二叉搜尋樹

2021-08-14 05:30:30 字數 1670 閱讀 2877

二叉搜尋樹滿足對於乙個節點,它的左子樹上的每個節點小於它,右子樹上的節點大於它。

所以,它的中序遍歷就是對每個節點的從小到大排序。

這裡著重介紹對於節點的插入、查詢與刪除。

#include

#define maxn 500000

struct node;

node tree[maxn+5];

node *nil,*root,*ncnt;//根節點,空指標與節點數

void init()

node * newnode(int val)

void insert(node *&rt,int val)

int d=(val>=rt->key);//判斷方向

insert(rt->ch[d],val);//遞迴

}void middle(node *rt)

void first(node *rt)

int main()

else

}return

0;}

#include

#define maxn 500000

struct node;

node tree[maxn+5];

node *nil,*ncnt,*root;

void init()

inline node * newnode(int val)

void insert(node *&rt,int val)

int d=(val>=rt->key);

insert(rt->ch[d],val);

}void middle(node *rt)

void first(node *rt)

node *find(node *rt,int val)//新增find函式

int main()

else

if(op[0]=='f')//插入操作

else

}return

0;}

#include

#define maxn 500000

struct node;

node tree[maxn+5];

node *root,*nil,*ncnt;

void init()

inline node * newnode(int val)

void insert(node *&rt,node *fa,int val)

int d=(val>=rt->key);

insert(rt->ch[d],rt,val);//遞迴

}node *find(node *rt,int val)

node *findnext(node *rt)

void delete(node *rt,int val)

if(y!=z)

z->key=y->key;

}void middle(node *rt)

void first(node *rt)

int main()

else

if(op[0]=='f')

else

if(op[0]=='d')

else

}return

0;}

二叉搜尋樹 二叉搜尋樹

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

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...