51nod 1832 先序遍歷與後序遍歷

2021-08-07 17:55:03 字數 976 閱讀 4589

標程:

考慮乙個有兩個兒子的節點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...