思路:這個就是一道模擬二叉樹的題。反正我是這麼理解的。
首先建立乙個結構體陣列,包含左孩子,右孩子,以及乙個變數用來標記後面他是否被刪除了。
然後就是插入的時候先判斷p(根據題目),判斷完p之後還要判斷k的左右孩子。
舉個栗子:比如說i為2,k為3,p為1.那麼現在2要往3的右邊插隊,你就首先要判斷3原先右邊有沒有數,沒有就直接插,有的話就是吧3的右孩子賦給2的右孩子,然後把3的右孩子變成2.
到這裡,整個二叉樹就算是模擬完了。然後就是刪除結點,刪乙個把結構體裡面標記變數變一下就可以了;
最後就是遞迴輸出,先搜它左邊,搜到頭後開始輸出,緊接著搜他右邊。
**如下:
#include
using namespace std;
int n,m,k,x;
struct noded[100010]
;void dfs(int i) //乙個我自己都不知道自己在哪的遞迴
int main(
)else d[k].r=i;
else
if(d[k].l)
else d[k].l=i;
} cin>>m;
while(m--)
dfs(1)
;}
洛谷 1160 佇列安排
題目描述 乙個學校裡老師要將班上n個同學排成一列,同學被編號為1 n,他採取如下的方法 1.先將1號同學安排進佇列,這時佇列中只有他乙個人 2.2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 i 1 中某位同學 即之前已經入列的同學 的左邊或右邊 3.從佇列中去掉...
洛谷 任務安排
初見安 這裡是傳送門 洛谷p2365 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 ...
洛谷 P1160 佇列安排
題目描述 乙個學校裡老師要將班上n個同學排成一列,同學被編號為1 n,他採取如下的方法 1.先將1號同學安排進佇列,這時佇列中只有他乙個人 2.2 n號同學依次入列,編號為i的同學入列方式為 老師指定編號為i的同學站在編號為1 i 1中某位同學 即之前已經入列的同學 的左邊或右邊 3.從佇列中去掉m...