• LeetCode


    题目:

    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
    

    思路:

    仍和Unique Binary Search Trees的思路一样,确定左右树。

    package bst;
    
    import java.util.ArrayList;
    import java.util.List;
    
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }
    
    public class UniqueBinarySearchTreesII {
    
        public List<TreeNode> generateTrees(int n) {
            List<TreeNode> res = new ArrayList<TreeNode>();
            if (n <= 0) return res;
            return generateTrees(1, n);
        }
        
        private List<TreeNode> generateTrees(int left, int right) {
            List<TreeNode> roots = new ArrayList<TreeNode>();
            if (left > right || left <= 0 || right <= 0) {
                roots.add(null);
            } else if (left == right) {
                TreeNode root = new TreeNode(left);
                roots.add(root);
            } else {
                for (int i = left; i <= right; ++i) {
                    List<TreeNode> leftTree = generateTrees(left, i - 1);
                    List<TreeNode> rightTree = generateTrees(i + 1, right);
                    for (int j = 0; j < leftTree.size(); ++j) {
                        for (int k = 0; k < rightTree.size(); ++k) {
                            TreeNode root = new TreeNode(i);
                            root.left = leftTree.get(j);
                            root.right = rightTree.get(k);
                            roots.add(root);
                        }
                    }
                }
            }
            
            return roots;        
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            UniqueBinarySearchTreesII u = new UniqueBinarySearchTreesII();
            u.generateTrees(3);
        }
    
    }
  • 相关阅读:
    在C#中实现高性能计时[转]
    序列化(Serializable)的学习
    日常常用英语
    使用javascript灵活控制DIV的位置
    酷我创始人雷鸣:程序员个人成长的四个要素
    String.Format格式说明
    各种类型转换的比较
    学好计算机英语
    AS关键字进行类型转化的优点以及限制
    Spoken English美国人常用的英语口语
  • 原文地址:https://www.cnblogs.com/null00/p/5116579.html
Copyright © 2020-2023  润新知