【从0到1冲刺蓝桥杯】——不同的二叉搜索树Ⅱ
不同的二叉搜索树Ⅱhttps://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; }};