樸素陣列:
/*
about: binary tree-postorder
auther: kongse_qi
date:2017/04/15
*/#include
#define maxn 20005
using
namespace
std;
int n, x[maxn], xx, ans = -1;
int l[maxn], r[maxn];
void init()
scanf("%d", &xx);
memset(l, -1, sizeof l);
memset(r, -1, sizeof r);
return ;
}int build()
m[en++] = x[i];
}return m[0];//最後一定剩下乙個,想想為什麼。(上一節提到了)
}void search(int curr)
int main()
stack實現:
int build()
q.push(x[i]);
}return q.top();
}
(其他部分完全相同)
stack維護起來非常簡單,因為他本來就是個棧的容器,而陣列則要模擬棧的形式,相對麻煩一點。
效率如下:
用時 記憶體 方法
144ms 3096kb(stack)
84ms 3064kb(陣列)
96ms 3528kb(鍊錶)
陣列最快,原因很顯然….
思考:如果資料範圍告訴你節點個數是x,你應該至少將陣列開成多大?為什麼?
自此完成。
箜瑟_qi 2017.04.15 10:56
後序拓展序列與相關(基於鍊錶實現)
序 構造出一棵二叉樹的方法有很多,基於 序拓展序列也可以構造出亦可唯一的一棵二叉樹,本文給出基於後序拓展序列生成二叉樹 基於鍊錶實現 何謂後續拓展序列?後續拓展序列指在二叉樹的後續遍歷序列中增加空節點的序號。input 一行字元,即擴充套件後序序列output 輸出對應的前序遍歷結果思路 通過棧來實...
由前序序列與中序序列實現後序遍歷
二叉樹是一種特殊的樹,二叉樹只有兩個分支,分別是該節點的左兒子和右兒子。前序遍歷 就是先遍歷根節點,然後再訪問左子樹與右子樹。遍歷子樹的時候同樣也是先遍歷根節點然後在遍歷他的左子樹與右子樹。中序遍歷 先遍歷左子樹,在遍歷根節點,最後遍歷右子樹。後序遍歷 先遍歷左子樹與右子樹,在遍歷根節點。因為有這樣...
Catalan數與棧序列
之前的作業裡有 dh 裡的一道題,問 你有1個棧 s 乙個變數 x 可以用於儲存 現有 read x 每次操作將 1 n 之間的整數按照從小到大順序讀入 x 中,每個數隻 read1 次 print x push x,s pop x,s 四種操作.求對於正整數 n 可以列印多少種 1 n 的全排列 ...