基础算法(Leetcode)刻意练习第二十三天——不同的二叉搜索树

LeetCode95题
首先明确一点,题目中返回的是一个列表,列表的每一个元素都是根节点的地址值。。一开始有点懵,以为是弄一个二维列表就可以了,还纳闷为啥要用树。。。
步入正题,整个问题可以从0到n,n个数字为根节点,每一次i作为根节点,都有左子树和右子树,左子树有从0到i-1分别作为根节点,每一个根节点j又有左子树和右子树。。。大家已经大概看到了,这是一个递归方法。
在递归过程,我们每次吧树的左子树和右子树送到递归函数里。退出递归的条件:当没有元素的时候,返回一个[None]。最后在循环合成该树,并把他放入数组中,完成。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def generateTrees(self, n: int) -> List[TreeNode]:
        if(n==0):
            return []
        def build_Trees(left,right):
            all_trees=[]
            if(left>right):
                return [None]
            for i in range(left,right+1):
                left_trees=build_Trees(left,i-1)
                right_trees=build_Trees(i+1,right)
                for l in left_trees:
                    for r in right_trees:
                        cur_tree=TreeNode(i)
                        cur_tree.left=l
                        cur_tree.right=r
                        all_trees.append(cur_tree)
            return all_trees
        res=build_Trees(1,n)
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值