#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生成一棵二叉樹,並按照前序遍歷輸出 根據如上描述,生成的二叉樹應該長這樣...