LeetCode 095 Unique Binary Search Trees II
来源:互联网 发布:响当当 小贷软件 编辑:程序博客网 时间:2024/06/07 05:34
Given 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对于给定n,生成所有可能的二叉查找树。
1 和前一篇对应,要知道二叉查找树的定义。
2 只求数量的时候,从底层记录开始的dp算法可以完成。
但是需要所有可能的形式的时候,要把每次生成都给列出,这时候一般使用从顶而下的dfs算法。
3 当使用这种dfs的时候,函数返回的内容很关键。可以看到返回的是ArrayList<TreeNode> ,代表是什么?一组树的节点。也就是满足特定要求的树的节点。
4 然后考虑递归形式。考虑到任何一点i作为root,用这个函数,可以生成一组可能的左节点,也可以生成一组可能的右节点。左节点的要求是start--i-1,右节点的要求是i+1--end。这样一来,再把每组都给链接到root上面,把这个root入arraylist即可。可以看到下层也是这么处理的。
public class Solution { public ArrayList<TreeNode> generateTrees(int n) { return useme(1,n); } public ArrayList<TreeNode> useme(int start,int end){ ArrayList<TreeNode> ans = new ArrayList<TreeNode>(); if(start>end){ ans.add(null); return ans; } for(int i=start;i<=end;i++){ ArrayList<TreeNode> left = useme(start,i-1); ArrayList<TreeNode> right = useme(i+1,end); for(int j = 0 ;j<left.size();j++){ for(int k=0;k<right.size();k++){ TreeNode root = new TreeNode(i); root.left = left.get(j); root.right = right.get(k); ans.add(root); } } } return ans; }}
0 0
- LeetCode 095 Unique Binary Search Trees II
- 095 Unique Binary Search Trees II [Leetcode]
- LeetCode 095 Unique Binary Search Trees II
- LeetCode: Unique Binary Search Trees II
- LeetCode : Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- leetcode Unique Binary Search Trees II
- [LeetCode]Unique Binary Search Trees II
- [leetcode]Unique Binary Search Trees II
- LeetCode-Unique Binary Search Trees II
- [leetcode] Unique Binary Search Trees II
- LeetCode - Unique Binary Search Trees II
- LeetCode 95: Unique Binary Search Trees II
- Leetcode Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II
- Leetcode: Unique Binary Search Trees II
- leetcode Unique Binary Search Trees II
- 【Leetcode】Unique Binary Search Trees II
- 电子计算器
- android事件拦截
- MongoDB创建数据库管理员账号
- VirtualBox虚拟机中如何上网:
- 高级电子计算器
- LeetCode 095 Unique Binary Search Trees II
- JavaWeb(四)-----用Java程序操作XML①
- windows计算器
- linux定时任务的设置
- mina2线程总结
- 计算器与电子计算机
- 计算机选购技巧
- 计算机使用方法
- 我的第三课:【设计模式】====单例模式