LeetCode 095 Unique Binary Search Trees II
2014-03-03 13:19
375 查看
题目
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.
对于给定n,生成所有可能的二叉查找树。
思路
1 和前一篇对应,要知道二叉查找树的定义。
2 只求数量的时候,从底层记录开始的dp算法可以完成。
但是需要所有可能的形式的时候,要把每次生成都给列出,这时候一般使用从顶而下的dfs算法。
3 当使用这种dfs的时候,函数返回的内容很关键。可以看到返回的是ArrayList<TreeNode> ,代表是什么?一组树的节点。也就是满足特定要求的树的节点。
4 然后考虑递归形式。考虑到任何一点i作为root,用这个函数,可以生成一组可能的左节点,也可以生成一组可能的右节点。左节点的要求是start--i-1,右节点的要求是i+1--end。这样一来,再把每组都给链接到root上面,把这个root入arraylist即可。可以看到下层也是这么处理的。
代码
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; } }
相关文章推荐
- 095 Unique Binary Search Trees II [Leetcode]
- leetcode 095 —— Unique Binary Search Trees II
- Java for LeetCode 095 Unique Binary Search Trees II
- leetcode_095 Unique Binary Search Trees II
- LeetCode 095 Unique Binary Search Trees II
- [LeetCode]题解(python):095-Unique Binary Search Trees II
- LeetCode095 Unique Binary Search Trees II
- leetcode_c++:树:Unique Binary Search Trees II(095)
- LeetCode: Unique Binary Search Trees II [096]
- LeetCode-95-Unique Binary Search Trees II 二叉树
- [LeetCode] Unique Binary Search Trees II
- Unique Binary Search Trees II -- leetcode
- LeetCode No.95 Unique Binary Search Trees II
- [LeetCode] Unique Binary Search Trees II, Solution
- LeetCode-M-Unique Binary Search Trees II
- 95. Unique Binary Search Trees II LeetCode
- [Leetcode] 95. Unique Binary Search Trees II
- LeetCode 96 Unique Binary Search Trees II
- leetcode-java-95. Unique Binary Search Trees II
- LeetCode Unique Binary Search Trees II