天天看點

poj2201

建構笛卡爾樹

1. 分析資料遞歸建構樹,花費時間較長。

2. 在空樹基礎上不斷插入。

    建立node數組,0放a足夠小的頭,1~N放資料并按k有小到大排序。從1開始插入到隻有空頭的笛卡爾樹中。由于k的有序,對第i個,它要麼是i-1的右節點,要麼是i-1的父節點的右節點。。。根據a值(最小堆)的特點找到合适的節點j,則i是j的右節點。j原先的右子樹自然變成了i的左子樹,再維護好parent指針就可以了。

    然後就是輸出,我曾經是用按id排序再輸出的,結果這樣很慢,因為對struct移動效率很低,是以還是dfs并儲存資料比較好。

繼續閱讀