题目描述:
标签:树 二叉搜索 数学 动态规划 回溯 二叉树
给你一个整数
n
,请你生成并返回所有由n
个节点组成且节点值从1
到n
互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
代码:
思路分析:
分别以1~n之间任意一个数为根节点,该数左边对应左子树,右边对应右子树,所以修正区间,左区间为[begin,i-1],右区间为[i+1,end],在这两个区间继续递归生成二叉搜索树。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<TreeNode> generateTrees(int n) {
return generateTree(1,n);
}
public List<TreeNode> generateTree(int begin,int end){
List<TreeNode> res = new LinkedList<>();
if(begin > end){
res.add(null);
return res;
}
for(int i = begin;i <= end;i++){
List<TreeNode> leftNodes = generateTree(begin,i-1);
List<TreeNode> rightNodes = generateTree(i+1,end);
for(TreeNode leftNode : leftNodes){
for(TreeNode rightNode : rightNodes){
res.add(new TreeNode(i,leftNode,rightNode));
}
}
}
return res;
}
}