leetCode练习(95)
来源:互联网 发布:python.ax.text 编辑:程序博客网 时间:2024/05/29 14:25
题目:Unique Binary Search Trees II
难度:MEDIUM
问题描述:
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all 5 unique BST's shown below.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
解题思路:
通过先解决的Unique Binary Search Trees I,我们知道了可以用动态规划的方法解,这里方法与|一样,通过子问题解的组合来构成现问题的解。易错点在于,n=0时,我们对属于它的链表res[0]也要加入节点null,否则如果左子树需要n=0的解集,而链表为空,则会直接跳过里面对右子树的访问。所以我们需要加入一行res[0].add(null); 这样就能解决此问题。
具体代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public List<TreeNode> generateTrees(int n) { List<TreeNode>[] res=new List[n+1];res[0]=new ArrayList<>();if(n==0) return res[0];res[0].add(null);for(int i=1;i<=n;i++){res[i]=new ArrayList<>();for(int j=1;j<=i;j++){for(TreeNode left:res[j-1]){for(TreeNode right:res[i-j]){TreeNode root=new TreeNode(j);root.left=left;root.right=Clone(right,j);res[i].add(root);}}}}return res[n]; } public TreeNode Clone(TreeNode root,int index){if(root==null)return null;TreeNode res=new TreeNode(root.val+index);res.left=Clone(root.left,index);res.right=Clone(root.right,index);return res;}}
0 0
- leetCode练习(95)
- leetCode练习(7)
- leetCode练习(9)
- leetCode练习(2)
- leetCode练习(14)
- leetCode练习(3)
- leetCode练习(4)
- leetCode练习(19)
- leetCode练习(18)
- leetCode练习(5)
- leetCode练习(15)
- leetCode练习(20)
- leetCode练习(21)
- leetCode练习(16)
- leetCode练习(17)
- leetCode练习(11)
- leetCode练习(24)
- leetCode练习(22)
- 如何获得当前窗口的hwnd?的问题整理
- 通用机器学习流程与问题解决架构模板
- 数据结构栈——汉诺塔移动是否合法
- 再谈tapestry-delegate——优化与重构
- Python中pydub使用详解
- leetCode练习(95)
- Apache HttpComponents学习笔记(三):配置HttpClient
- 一套开源的 iOS 轻量级框架
- MFC接受 keyDown、char消息
- Tacos 一种 Tapestry 的局部刷新组件
- Spring注解详解
- 全局变量与局部变量在内存中的区别
- VC++ sizeof和strlen之间的区别
- Hibernate对象三种状态