題解:1. 申請儲存每個[st][ed]得空間
2. 初始化空間 複雜度為o(n^2)
3. 每次計算完st到ed得全排列都儲存起來(儲存st - ed得記憶)下次搜尋可以直接獲取
4. 如果memo[st][ed]不空,就表示儲存過,直接返回。
/**
* definition for a binary tree node.
* struct treenode
* treenode(int x) : val(x), left(nullptr), right(nullptr) {}
* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}
* };
*/class solution ;
int begin = 1;
int end = n;
// 分配空間
table.resize(n+1, vector>(n+1, vector()));
return dfs(begin, n);
}vectordfs(int begin, int end) );
}// 記憶化搜尋
if(!table[begin][end].empty())
vectorresult;
// 遍歷根結點的所有情況
for(int i = begin; i <= end; ++i) }}
// 記錄
table[begin][end] = result;
return std::move(result);}};
95 不同的二叉搜尋樹 II
二叉搜尋樹,又被稱為是二叉查詢樹 二叉排序樹,這種樹其左子樹所有節點的值均小於根節點的值,其右子樹所有節點的值均大於根節點的值,並且其左 右子樹均為二叉搜尋樹。空樹也是二叉搜尋樹。方法一 遞迴法 與這道題類似的是那道 96不同的二叉搜尋樹 在96中我們曾分析到,由於給定的節點值為1 n,是一組從小到...
95 不同的二叉搜尋樹 II
給定乙個整數 n,生成所有由 1 n 為節點所組成的二叉搜尋樹。示例 輸入 3 輸出 1,null,3,2 3,2,null,1 3,1,null,null,2 2,1,3 1,null,2,null,3 解釋 以上的輸出對應以下 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 ...
95 不同的二叉搜尋樹 II
給定乙個整數 n,生成所有由 1 n 為節點所組成的二叉搜尋樹。示例 輸入 3 輸出 1,null,3,2 3,2,null,1 3,1,null,null,2 2,1,3 1,null,2,null,3 解釋 以上的輸出對應以下 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 ...