基礎演算法 M叉樹的遍歷問題(BZOJ1185)

2021-07-26 06:55:06 字數 957 閱讀 6852

時間限制: 1 sec  

記憶體限制: 64 mb

提交: 34  

解決: 20 [

提交][

狀態][

我的提交]

已知一棵m叉樹的先序遍歷s1和後序遍歷s2,s1和s2均為由小寫字母組成的字串。求可能的中序遍歷的總數,結果不超過長整型。

輸入:三行:第一行:乙個整數m,1 = < m < = 20, 第二行:乙個字串s1,表示該樹的先序遍歷。第三行:乙個字串s2,表示該數的後序遍歷。 s1和s2的長度相等,且均不超過26。

輸出:乙個整數,表示所有可能的中序遍歷的總數。

copy

(如果複製到控制台無換行,可以先貼上到文字編輯器,再複製)

10

abcbca

45
分析:

把m叉樹轉成二叉樹(二叉樹的前序遍歷為m叉樹的前序遍歷,二叉樹的中序遍歷為m叉樹的後序遍歷)。建好二叉樹後再轉回m叉樹,然後m叉樹上總可能性為該層所有子樹的可能性之積再乘上下一層的排列組合(楊輝三角形預處理)

#include#include#include#include#include#includeusing namespace std;

const int m=20;

int n,m,cnt=1;

long long dp[25][25];

char pre[30],mid[30];

struct nodetree[1010];

struct node2tree[1010];

void build(int l,int r,int now,bool flag)

} void count(int r,int x)

void tree_creat(int x)

long long dfs(int x)

int main()

熱門基礎演算法筆記 二叉樹遍歷

public int jiecheng int n 遞迴結束條件 else return res 簡單理解 根左右 也可照這個記憶 arraylist list newarraylist 定義乙個集合來存 public arraylist xx treenode root 簡單理解 左根右 也可照這...

二叉樹基礎 遍歷

每個結點最多有兩棵子樹,左子樹和右子樹,次序不可以顛倒。滿二叉樹 所有終端都在同一層次,且非終端結點的度數為2。在滿二叉樹中若其深度為h,則其所包含的結點數必為2 h 1。完全二叉樹 除了最大的層次即成為一顆滿二叉樹且層次最大那層所有的結點均向左靠齊,即集中在左面的位置上,不能有空位置。對於完全二叉...

演算法筆記 問題 D 二叉樹遍歷

題目描述 編乙個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立乙個二叉樹 以指標方式儲存 例如如下的先序遍歷字串 abc de g f 其中 表示的是空格,空格字元代表空樹。建立起此二叉樹以後,再對二叉樹進行中序遍歷,輸出遍歷結果。輸入輸入包括1行字串,長度不超過100。輸出可能有多組測試資...