zoukankan      html  css  js  c++  java
  • 95. Unique Binary Search Trees II(dfs经典题目)

    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
    
    
    # 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 generateTrees(self, n):
            """
            :type n: int
            :rtype: List[TreeNode]
            """
            if n == 0: return []
            return self.generateTreesDFS(1, n)
    
        def generateTreesDFS(self, left, right):
            if left > right:
                return [None]
            res = []
            for i in range(left, right + 1):
                left_nodes = self.generateTreesDFS(left, i - 1)
                right_nodes = self.generateTreesDFS(i + 1, right)
                for left_node in left_nodes:
                    for right_node in right_nodes:
                        root = TreeNode(i)
                        root.left = left_node
                        root.right = right_node
                        res.append(root)
            return res
    

    所有的解就是分别以1,2,3...n做根节点的解的集合.而以i为根节点的解的个数就是左右子树的解的积.
    递归求解.

  • 相关阅读:
    java中的lamda表达式
    Arrays.sort()中Lambda表达式
    检索中的函数及不同范围的处理
    2014.6.24
    2014.6.23
    第六天培训
    第五天培训
    第四天培训
    第三天培训!
    第二天培训
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9744934.html
Copyright © 2011-2022 走看看