LeetCode: 95. Unique Binary Search Trees II(Week 11)
阿新 • • 發佈:2018-12-21
95. Unique Binary Search Trees II
-
題目
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n.
Example:
Input: 3 Output: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ] Explanation: The above output corresponds to the 5 unique BST's shown below: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
- 題解
- 本題的題意比較簡單,給出二叉搜尋樹的節點數目
n
,求出可以構成多少中不同結構的二叉搜尋樹。 - 其實實現起來還是比較簡單的。對於其中一個節點
i
,將其作為該樹的根節點,然後其左邊的元素都作為其左子樹的元素,右邊的元素都作為其右子樹的元素,再通過遞迴得到其左子樹和右子樹的可能出現的情況的集合,然後再組合起來。一些需要注意的情況:- 遞迴的結束條件: 當該子樹的起點大於終點的時候 –
start > end
,遞迴結束,能夠生成子樹的情況為無,即為NULL
。 - 對得到的左子樹和右子樹的返回情況需要判斷其是否為空(可能沒有不存在左或右節點的情況),如果不存在,需要推入一個
NULL
,然後再進行組合,否則遍歷組合的時候left.size * right.size = 0
- 遞迴的結束條件: 當該子樹的起點大於終點的時候 –
- 本題的題意比較簡單,給出二叉搜尋樹的節點數目
- 實現程式碼
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<TreeNode*> generateTrees(int n) {