Unique Binary Search Trees II
来源:互联网 发布:matalab y引入数据 编辑:程序博客网 时间:2024/05/01 06:00
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.
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
反复做这种题,感觉自己已经会了,其实好多边界情况考虑的不清楚,这回找了半天,记录一下。
这道题要采用递归的思路,对于两个下标之间的部分建立子树。
函数为:
private List<TreeNode> generateTrees(int i, int j)
其中i, j 分别为目前可以使用的节点的左右界限,需要用这区间的值构建子树,任务是找出一个根节点,然后对根节点左右进行递归查找。
对于i j 无非两种情况:
1. i > j
如果下标i > j 那么之间不存在任何节点,所以需要在结果集result里加上一个null,如果没有加的话,是无法构建以当前节点为根节点的子树的。这里需要注意一下。
2. i<=j, 表示i j 之间有可以利用的节点作为根节点,构建一颗子树。那么用一个嵌套循环,构建以这个点作为根节点的所有子树,然后把所有结果存入result当中,(只存根节点)。然后一层层往上层返回,这样就能把所有的情况算出来。
代码:
public List<TreeNode> generateTrees(int n) { // write your code here List<TreeNode> result = new ArrayList<>(); if(n<=0){ result.add(null); return result; } result = generateTrees(1, n); return result; } private List<TreeNode> generateTrees(int i, int j){ List<TreeNode> result = new ArrayList<>(); if(i>j){ result.add(null); return result; } for(int k = i;k<=j;k++){ List<TreeNode> left = generateTrees(i, k-1); List<TreeNode> right = generateTrees(k+1, j); for(TreeNode l: left){ for(TreeNode r: right){ TreeNode cur = new TreeNode(k); cur.left = l; cur.right = r; result.add(cur); } } } return result; }
0 0
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees (& II)
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- Unique Binary Search Trees II
- android 平台NDK MD5加密
- muduo库的AtomicIntegerT剖析
- mt5 open close数组起点设置
- mfc基于对话框计算器程序
- Learning Python 020 pass 的用法
- Unique Binary Search Trees II
- Maximum Product Subarray
- mt5 竖线,连接线 方框
- GCC 符号表小结
- Longest Increasing Subsequence
- Easy 242题 Valid Anagram
- Python的执行模型(Execution Model)
- 大学感悟【六】
- Longest Common Subsequence