您的位置:首页 > 产品设计 > UI/UE

LeetCode Unique Binary Search Trees II

2017-07-29 09:51 405 查看

LeetCode解题之Unique Binary Search Trees II

原题

给定1到n这n个数,用它们可以构成多少种形状不同的二叉搜索树。

将全部的二叉搜索树罗列出来。

注意点:

这n个数都要是二叉搜索树的节点。不能仅仅取部分

样例:

输入: n = 3

输出:

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


解题思路

Unique Binary Search Trees 仅仅要求不同二叉搜索树的数目。如今要求把全部的树的结构都打印出来。所以在递归的时候要把树拼装出来,而不是仅仅计算数目。

并且同一个子树可能会在不同的二叉搜索树中多次出现,为了不反复计算,就用一个map来缓存构造过的树形结构。

AC源代码

# 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 []
self.cache = {}
return self._generateTrees(1, n)

def _generateTrees(self, start, end):
if (start, end) not in self.cache:
roots = []
for root in range(start, end + 1):
for left in self._generateTrees(start, root - 1):
for right in self._generateTrees(root + 1, end):
node = TreeNode(root)
node.left = left
node.right = right
roots.append(node)
self.cache[(start, end)] = roots
return self.cache[(start, end)] or [None]

if __name__ == "__main__":
None


欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: