Unique Binary Search Trees II - Leetcode

来源:互联网 发布:封面设计 知乎 编辑:程序博客网 时间:2024/06/15 13:38

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; left = null; right = null; } * } */public class Solution {    public List<TreeNode> generateTrees(int n) {       return generateTreesHelper(1,n);        }    private List<TreeNode> generateTreesHelper(int start, int total){        List<TreeNode> subTree = new ArrayList<>();        if(start > total){            subTree.add(null);            return subTree;        }                for(int k=start; k<=total; k++){            List<TreeNode> leftSub = generateTreesHelper(start, k-1);            List<TreeNode> rightSub = generateTreesHelper(k+1, total);            for(TreeNode l:leftSub){                for(TreeNode r:rightSub){                    TreeNode t = new TreeNode(k);                    t.left = l;                    t.right = r;                    subTree.add(t);                }            }        }                return subTree;    }}

分析:这个是把每一个构造的tree都存到一个List里面。从1开始建造。

Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.

For example,
Given n = 3, your program should return all 5 unique BST's shown below.

   1         3     3      2      1    \       /     /      / \      \     3     2     1      1   3      2    /     /       \                 \   2     1         2                 3

0 0