標程:
考慮乙個有兩個兒子的節點x,令x的左兒子為l,右兒子為r
則x子樹的先序遍歷和後序遍歷類似下圖
先序遍歷 x l … r …
後序遍歷 … l … r x
可以發現我們可以輕鬆地找出兩個兒子從而確定樹的形態。
只有乙個兒子的話這個兒子既可以是左兒子也可以是右兒子。
只需要統計有乙個兒子的節點數量即可。
要用大整數
我是看的一篇文章講到了類似的問題
由先序和後序遍歷求解符合條件的n叉樹個數的方法及程式實現:
#include
using
namespace
std;
struct bigint
bigint(int v)
while(v);
}bigint operator *(const bigint &b)const
if(up != 0)
res.a[i + b.len] = up;
}res.len = len + b.len;
while(res.a[res.len - 1] == 0 &&res.len > 1)res.len--;
return res;
}void output()
};const
int maxn = 10010;
int a[maxn];
int b[maxn];
int n;
bigint res(1);
int sf(int l, int r, int num)
int calc(int num)
void dfs(int al, int ar, int bl, int br)
res = res*bigint(calc(ccc));
}void solve()
int main()
51Nod 1832 先序遍歷與後序遍歷
acm模版 官方題解的思路十分的清晰,所以先看看官方題解 也就是說決定樹的種類的是只擁有乙個兒子的結點個數 ct 最後結果為 2c t 由於這裡的總結點數十分大,所以這裡的結果將會是乙個大數,那麼我們順其自然的引入大數,當然,如果你害怕不夠快,可以再加上乙個快速冪,當然,不加也是穩穩的,當然,剩下的...
1832 先序遍歷與後序遍歷
1832 先序遍歷與後序遍歷 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 對於給定的乙個二叉樹的先序遍歷和後序遍歷,輸出有多少種滿足條件的二叉樹。兩棵二叉樹不同當且僅當對於某個x,x的左兒子編號不同或x的右兒子編號不同。input 第一行乙個正整數n 3 n ...
51 nod 演算法馬拉松28 先序遍歷與後序遍歷
先序遍歷與後序遍歷 scape 命題人 tangjz 測試 基準時間限制 1 秒 空間限制 131072 kb 分值 40 對於給定的乙個二叉樹的先序遍歷和後序遍歷,輸出有多少種滿足條件的二叉樹。兩棵二叉樹不同當且僅當對於某個x,x的左兒子編號不同或x的右兒子編號不同。input 第一行乙個正整數n...