二叉搜尋樹 基礎

2022-07-12 18:24:11 字數 1657 閱讀 7046

在沒有重複權值的基礎上建立的二叉搜尋樹;

這是不平衡的;

#include //#include //#pragma gcc optimize("o2")

using namespace std;

//using namespace __gnu_pbds;

#define combine pair, greater, pairing_heap_tag

#define ll long long

#define ll long long

#define pair pair#define ull unsigned long long

#define ls rt<<1

#define rs rt<<1|1

#define one first

#define two second

#define ms 1000009

#define inf 1e9

#define dbinf 1e100

#define pi acos(-1.0)

#define eps 1e-9

#define mod 99999997

#define mod1 39989

#define mod2 1000000000

int n,m;

struct nodep[ms];

int tot,root;

int add(int val); // 新建節點左右孩子為 0

return tot;

}void build()

int search(int rt,int val)

void insert(int &rt,int val)

if(val == p[rt].val) return; // 存在則無操作

if(val > p[rt].val) insert(p[rt].r,val);

if(val < p[rt].val) insert(p[rt].l,val);

}int getfront(int rt,int val)

break;

} if(p[ans].val < p[rt].val && p[rt].val < val) ans = rt; // 一邊遞迴一邊更新

if(val < p[rt].val) rt = p[rt].l;

else rt = p[rt].r;

} return ans;

}int getnext(int rt,int val)

break;

} if(val < p[rt].val && p[rt].val < p[ans].val) ans = rt;// 一邊遞迴一邊更新

if(val < p[rt].val) rt = p[rt].l;

else rt = p[rt].r;

} return ans;

}void remove(int &rt,int val)

return;

} if(val < p[rt].val) remove(p[rt].l,val);

if(val > p[rt].val) remove(p[rt].r,val);

}void mid_order(int rt)

int main()

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 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 解釋 輸入為 ...