leetcode96
給定乙個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種?(注意是二叉搜尋樹)
示例: 輸入: 3 輸出: 5
解釋:給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
思路:用乙個陣列來儲存n之前每個結點能構成的不同二叉樹種數。在求n的時候,依次以1,2,3.....n作為根,假設n為6,在以3作為根時,它的左子樹只能是1和2,右子樹只能是4,5和6,左子樹能構成的種數已知為dp[2],右子樹的結構和1,2,3相同,它能構成的種數與dp[3]相同。因此最終答案就dp[2]*dp[3]!
class solution
}return dp[n];
}}
leetcode95
給定乙個整數 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 2
/ / \ \
2 1 2 3
思路與上題類似
class solution
res[0].add(null);
res[1] = new arraylist<>();
res[1].add(new treenode(1));
//求n的時候,先求出1到n-1的結果
for(int i=2;i<=n;i++)}}
}return res[n];
}public treenode clone(treenode root,int offset)
treenode node = new treenode(root.val + offset);
node.left = clone(root.left,offset);
node.right = clone(root.right,offset);
return node;
}}
動態規劃 最優二叉搜尋樹
動態規劃與分治方法類似,都是通過組合子問題來求解原問題。通常用來求解最優化問題,通常按如下4個步驟設計乙個動態規劃演算法 1.刻畫乙個最優解的結構特徵 2.遞迴的定義最優解的值 3.採用自底向上的方法計算最優解的值 4.利用計算出的資訊構造乙個最優解。二叉搜尋樹 optimal binary sea...
最優二叉搜尋樹動態規劃
最優二叉搜尋樹問題是對於有序集s及其訪問概率或權值 q0,p1,q1,p2,q2,p3,q3 在所有表示有序集s的二叉搜尋樹中找出一顆具有最小平均路長的二叉搜尋樹。解決方法 使用動態規劃方法自底向上逐步構造最優二叉搜尋樹。動態規劃的兩個重要要素是 1 最優子結構。2 重疊子問題。1 所謂最優化子結構...
動態規劃最優二叉搜尋樹
前面的optimal bst還能寫出來,要去construct就不會了,也是理解不夠深刻的原因吧。以下 的construct用了兩種方法,參照了兩位博主,前乙個 風格非常暴力,能看懂以後寫不出來系列。第二種的d的輸出那我沒有看出邏輯,好像是用的輸出的相鄰兩個下標是在同乙個節點上連著?這個的理由我沒想...