二叉排序樹基本操作

2022-05-19 21:36:09 字數 2305 閱讀 4580

題目描述

編寫一棵二叉排序樹,來支援以下 \(6\) 種操作:

插入 \(x\) 數

刪除 \(x\) 數(若有多個相同的數,因只刪除乙個;如果 \(x\) 不存在則不需要刪除)

查詢 \(x\) 數的排名(排名定義為比當前數小的數的個數 \(+1\) ;如果 \(x\) 不存在則輸出 \(-1\))

查詢排名為 \(x\) 的數(如果 \(x\) 大於樹中元素個數,則輸出 \(-1\))

求 \(x\) 的前驅(前驅定義為小於 \(x\),且最大的數;如果沒有輸出 \(-1\) )

求 \(x\) 的後繼(後繼定義為大於 \(x\),且最小的數;如果沒有輸出 \(-1\) )

輸入格式

第一行為 \(n\)(\(1 \le n \le 10000\)),表示操作的個數,下面 \(n\) 行每行有兩個數 \(\text\) 和 \(x\),\(\text\) 表示操作的序號( \(1 \leq \text \leq 6\) )

輸出格式

對於操作 \(3,4,5,6\) 每行輸出乙個數,表示對應答案

樣例輸入

10

1 31 7

1 15

1 12

3 72 7

3 74 1

5 86 8

樣例輸出
2-13

312

實現**如下:

#include using namespace std;

const int maxn = 100010;

int lson[maxn], rson[maxn], val[maxn], sz, cnt, tot[maxn];

void insert(int num)

// 判斷num是否存在

int x = 1;

while (true)

else

}// 插入num

cnt ++;

val[++sz] = num;

tot[sz] = 1;

x = 1;

while (true)

}else }}

}void delete(int num)

int x = 1, p = 0, y, q;

while (true)

else

}cnt --;

x = 1; p = 0;

while (true)

else

}if (!lson[x] && !rson[x])

}else if (lson[x])

if (lson[q] == y) lson[q] = lson[y];

else rson[q] = lson[y];

val[x] = val[y];

}else

if (lson[q] == y) lson[q] = rson[y];

else rson[q] = rson[y];

val[x] = val[y];

}}int getrank(int num)

else if (num < val[x])

else

}if (!exist) return -1;

// 然後從上到下判斷

x = 1;

int res = 0;

while (true)

else if (val[x] < num)

else

}return res;

}int getnumbyrank(int rk)

}}int getpre(int num)

else

}return res;

}int getnext(int num)

else

}return res;

}int n, op, x;

int main()

return 0;

}

使用 set 來實現上述功能的**:

#include using namespace std;

setst;

int n, op, x;

int main()

else if (op == 3)

else if (op == 4)

}else if (op == 5)

}else

}return 0;

}

注意distance()函式的時間複雜度是 \(o(n)\) 的。

二叉排序樹基本操作

1.儲存結構 二叉鍊錶 include include typedef struct bitnode bitnode,bitree 2.二叉排序樹查詢演算法 遞迴查詢二叉排序樹t中是否存在key status search bitree t,int key,bitree f,bitree p p指向...

二叉排序樹基本操作

二叉排序樹,顧名思義,是一種排列好順序的二叉樹。它的排序規則是 每個結點的左子樹上的值都比它本身的值小,右子樹上的值都比它本身的值大。include include define true 1 define false 0 typedef struct binode binode,bitree in...

二叉排序樹的基本操作

二叉排序樹 其中有插入 刪除 查詢操作 include include define false 0 define ture 1 define maxsize 10 typedef struct bitnode bitnode,bitree 查詢 f指向t的雙親,初始時為null 這裡用f,p,是問...