> 文档中心 > 【从0到1冲刺蓝桥杯】——不同的二叉搜索树Ⅱ

【从0到1冲刺蓝桥杯】——不同的二叉搜索树Ⅱ

不同的二叉搜索树Ⅱicon-default.png?t=M276https://leetcode-cn.com/problems/unique-binary-search-trees-ii/

 题目描述:

给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 

 

解题思路: 

 

/ * 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 generateTrees(int n) { if (n) return generate(1, n); else return vector{};    } vector generate(int left, int right) { vector ans; if (left > right) {     ans.push_back(nullptr);     return ans; } for (int i = left; i <= right; i++) {     vector left_nodes = generate(left, i - 1);     vector right_nodes = generate(i + 1, right);     for (TreeNode *left_node : left_nodes) {  for (TreeNode *right_node : right_nodes) {      TreeNode *t = new TreeNode(i);      t->left = left_node;      t->right = right_node;      ans.push_back(t);  }     } } return ans;    }};