輸入: 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
給定乙個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種?
示例:
輸入: 3
輸出: 5
解釋:給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
搜尋二叉樹(bst)的定義
若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。給點乙個數,去構造bst.
[1, 2, 3]
可以把這個數列做左子樹和右子樹的劃分:
[1] [2, 3]
[1, 2] [3]
[1, 2] [2, 3] 又可以做左子樹和右子樹的劃分.這是乙個遞迴的過程.
把遞迴的結果構造起來,即可成為答案.
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
private listgeneratebst(int left, int right)
for (int i = left; i <= right; i++) }}
return res;}}
如果只需要數目,不需要生成具體的bst的話,只要能求出左子樹有幾種構造,右子樹有幾種構造,就可以最終確定.
而確定左子樹和右子樹的問題的時候,又可以劃分為子問題.
eg:求 [1,2,3,4] 依賴於:
[1,2,3] [2,3,4]
又依賴於:
[1,2] [2,3] [3,4]的構造有幾種.
leetcode 95 96 解題思路
95.unique binary search trees ii given an integer n,generate all structurally uniquebst s binary search trees that store values 1 n.example input 3out...
95 96不同的二叉搜尋樹I,II
96.不同的二叉搜尋樹 class solution return dp n 95.不同的二叉搜尋樹 ii vector generatetreedfs int start,int end return subtree class solution return generatetreedfs 1,...
leetcode 不同的子串行
給定乙個字串 s 和乙個字串 t 計算在 s 的子串行中 t 出現的個數。字串的乙個 子串行 是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 題目資料保證答案符合 32 位帶符號整數範圍 輸入 s rabbb...