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

1 2
| 输入:n = 3 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
|
示例 2:
提示:
题目解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| package algorithm;
import java.util.*;
public class UniqueBinarySearchTreesII {
public static List<TreeNode> generateTrees(int n) { if (n == 0) { return new LinkedList<>(); } return generateTrees(1, n); }
public static List<TreeNode> generateTrees(int start, int end) { List<TreeNode> allTrees = new LinkedList<>(); if (start > end) { allTrees.add(null); return allTrees; }
for (int i = start; i <= end; i++) { List<TreeNode> leftTrees = generateTrees(start, i - 1);
List<TreeNode> rightTrees = generateTrees(i + 1, end);
for (TreeNode left : leftTrees) { for (TreeNode right : rightTrees) { TreeNode currTree = new TreeNode(i); currTree.left = left; currTree.right = right; allTrees.add(currTree); } } } return allTrees; }
public static void main(String[] args) { generateTrees(1);
generateTrees(3); }
public static 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; } } }
|
打印:
思路:
思路上,面向答案编程。其实分左右递归答案我是想出来了,但是怎么合并和返回没想好。