Unique Binary Search Trees II

这道题的解法稍微有点难懂,不过概括起来可以归结为分治法,以1-n中的任意一个数为根节点,同时划分两个子区域再去找结果,最后把子结果中的结果拼起来,这道题对于范围到底是代表区域还是代表结点个数思维很混乱

class Solution(object):
    def generateTrees(self, n):
        """
        :type n: int
        :rtype: List[TreeNode]
        """
        if n == 0:
            return []
        if n == 1:
            return [TreeNode(1)]
        return self.generate(1, n)

    def generate(self, start, end):
        result = []
        if start > end:
            return result + [None]

        for i in xrange(start, end + 1):
            left = self.generate(start, i - 1)
            right = self.generate(i + 1, end)
            for leftNode in left:
                for rightNode in right:
                    root = TreeNode(i)
                    root.left = leftNode
                    root.right = rightNode
                    result.append(root)

        return result

results matching ""

    No results matching ""