統計和生成所有不同的二叉樹

2022-09-22 22:48:17 字數 752 閱讀 4186

#include "tree.h"

using namespace std;

//實際上記錄下從1到n的每個的可能的二叉樹的個數

//num[i]表示有i個節點時,有多少可能的二叉樹

//num[i + 1]可以由num[0]...num[i]的記錄計算得到

//具體的計算方式是認為每個節點都可以做頭結點,當節點j做頭節點時

//可能的二叉樹個數為左邊的num[j - 1](j-1個節點的可能的二叉樹個數)

//乘以右邊的num[i - j](i-j個節點的可能的二叉樹個數),num[j - 1]和num[i - j]

//一定能在儲存好的記錄num[0]...num[i]中找到

//最後累加得到num[i + 1]的值

int numtrees(int n)

return num[n];

}//返回n個節點可能的所有m個二叉樹

node* clonetree(node* head)

list genera(int start, int end)

}return res;

}list generatetree(int n)

int main()

{ list nlist = generatetree(2);

for(list::iterator it = nlist.begin(); it != nlist.end(); ++it)

{print(*it);

cout <

統計和生成所有不同的二叉樹

題目 給定乙個整數n,如果n 1,代表空樹結構,否則代表中序遍歷的結果為.請返回可能的二叉樹結構有多少。public class numtrees int dp newint n 1 dp 0 1 for int i 1 i n i return dp n 高階 n的含義不變,假設可能的二叉樹結構有...

生成二叉樹

問題描述 由中序遍歷和後續遍歷生成二叉樹 解題思路 方法一 時間o n2 空間 o 1 public treenode buildtree int inorder,int postorder public treenode buildnode int inorder,int ib,int ie,in...

二叉樹的生成

from pdd 給定乙個list,比如 7,8 2,3 2,4 4,5 4,6 3,7 其中integer 0 表示父節點,integer 1 表示子節點 排在前面的為左子節點,排在後面的為有子節點 題目要求 根據這個list生成一棵二叉樹,並按照前序遍歷輸出 根據如上描述,生成的二叉樹應該長這樣...