zoukankan      html  css  js  c++  java
  • 95. Unique Binary Search Trees II

    1. Question:

    95. Unique Binary Search Trees II

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

    Example:

    Input: 3
    Output:
    [
      [1,null,3,2],
      [3,2,null,1],
      [3,1,null,null,2],
      [2,1,3],
      [1,null,2,null,3]
    ]
    Explanation:
    The above output corresponds to the 5 unique BST's shown below:
    
       1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3

    2. Solution:
    # Definition for a binary tree node.
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution(object):
    
        def genTrees(self, values):
            size = len(values)
            if size <= 0:
                return []
            re_list = []
    
            if size == 1:
                node = TreeNode(values[0])
                re_list.append(node)
                return re_list
    
            for i in range(size):
                left_list = self.genTrees(values[:i])
                right_list = self.genTrees(values[i + 1:])
    
                if len(left_list) == 0:
                    for right in right_list:
                        root = TreeNode(values[i])
                        root.right = right
                        re_list.append(root)
                    continue
    
                if len(right_list) == 0:
                    for left in left_list:
                        root = TreeNode(values[i])
                        root.left = left
                        re_list.append(root)
                    continue
    
                for left in left_list:
                    for right in right_list:
                        root = TreeNode(values[i])
                        root.left = left
                        root.right = right
                        re_list.append(root)
    
            return re_list
    
        def generateTrees(self, n):
            """
            :type n: int
            :rtype: List[TreeNode]
            """
            re_list = []
    
            if n == 1:
                root = TreeNode(1)
                re_list.append(root)
                return re_list
    
            for value in range(1, n + 1):
                left_list = self.genTrees(list(range(1, value)))
                right_list = self.genTrees(list(range(value + 1, n + 1)))
    
                if len(left_list) == 0:
                    for right in right_list:
                        root = TreeNode(value)
                        root.right = right
                        re_list.append(root)
                    continue
    
                if len(right_list) == 0:
                    for left in left_list:
                        root = TreeNode(value)
                        root.left = left
                        re_list.append(root)
                    continue
    
                for left in left_list:
                    for right in right_list:
                        root = TreeNode(value)
                        root.left = left
                        root.right = right
                        re_list.append(root)
    
            return re_list
    
    
    if __name__ == "__main__":
        obj = Solution()
        re = obj.generateTrees(3)
        print(re)
        print("Done")
  • 相关阅读:
    中国首个 SaaS 模式的云告警平台安卓版 APP 上线
    Cloud Insight 和 BearyChat 第一次合体,好紧张!
    安卓 DevOps:从一次推送命令到生产
    Jmeter 使用笔记之 html 报告扩展(一)
    10大常见的安全漏洞!你知道吗?
    iOS 并发:NSOperation 与调度队列入门(1)
    欺诈网站都注重用户体验!你,还在等什么?!
    你知道在深圳一个月花多少钱吗?
    找不到编译器:wepy-compiler-less
    wepy项目的学习
  • 原文地址:https://www.cnblogs.com/ordili/p/9976254.html
Copyright © 2011-2022 走看看