LeetCode 95 Unique Binary Search Tree II(Python详解及实现)
来源:互联网 发布:upchina是什么软件 编辑:程序博客网 时间:2024/06/04 23:19
【题目】
Given an integer n, generate allstructurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all5 unique BST's shown below.
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
这道题与94题类似,94题求得是符合条件的二叉树的棵树,这题是返回所有符合条件的二叉查找树。
【思路】
二叉查找树,也称为二叉搜索树,二叉排序树。它可以是一棵空树,也可以是具有下列性质的二叉树:
若二叉查找树的左子树不空,则左子树上的所有结点的值均小于它的根结点的值,若右子树不为空,则右子树上所有结点的值均大于它的根结点的值;它的左右子树也分别为二叉排序树。
对于求数量的题目一般考虑DP,而枚举所有符合条件的情况,一般用DFS。每次选取其中一个为根结点,然后求左右子树。当输入n时,二叉查找树由【1,2,···i,···n】构成
根据二叉查找树的构成性质:当选择i为根结点时,【1,2,···i-1】构成其左子树,【i+1,i+2,···,n】构成其右子树。
当b > e 时,返回空(注意不是null);
当b <= e时,用leftTree 和rightTree来分别接收左右子树。
【Python实现】
# 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.dfs(1,n) def dfs(self, b, e):#b,e为开始和结束数字 if b > e: return [None] res = [] for rootVal in range(b, e + 1): leftTree = self.dfs(b, rootVal - 1) rightTree = self.dfs(rootVal + 1, e) for i in leftTree: for j in rightTree: root = TreeNode(rootVal) root.left = i root.right = j res.append(root) return res if __name__ == '__main__': S= Solution() S.generateTrees(3)
- LeetCode 95 Unique Binary Search Tree II(Python详解及实现)
- LeetCode 96 Unique Binary Search Tree(Python详解及实现)
- LeetCode 98 Validate Binary Search Tree(Python详解及实现)
- LeetCode 99 Recover Binary Search Tree(Python详解及实现)
- Leetcode: Unique Binary Search Tree II
- 【Leetcode】Unique Binary Search Tree II (DP)
- leetcode-unique binary search tree II
- Unique Binary Search Tree II -LeetCode
- [leetcode][tree] Unique Binary Search Trees II
- Unique Binary Search Trees II Leetcode Python
- 【Leetcode】【python】Unique Binary Search Trees II
- Unique Binary Search Tree II
- LeetCode 95: Unique Binary Search Trees II
- LeetCode(95)Unique Binary Search Trees II
- [leetcode 95] Unique Binary Search Trees II
- leetcode || 95、Unique Binary Search Trees II
- Leetcode 95 Unique Binary Search Trees II
- Leetcode #95 Unique Binary Search Trees II
- Storm入门与实践(1)入门介绍
- Tornado之json api开发
- Vue实现tab切换
- 进度事件
- Python函数 extend()和append()的区别
- LeetCode 95 Unique Binary Search Tree II(Python详解及实现)
- 170810
- OC和C++混编造成其它类错误的问题(Compile Sources As Objective-C++)
- linux 多个shell命令一起执行
- vue.js学习笔记-7
- FZU 2191 完美的数字 <数学找规律>
- SparseArray ArrayMap HashMap
- Robberies||HDU2955
- golang fmt格式“占位符”