有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用动态编程生成从1到n的所有二进制搜索树

我正在为考试做一道练习题,这道题是写一个程序来生成所有二进制搜索树,这些树存储来自1。。。n

我们应该使用动态规划

公认的解决方案是

/**
 * Definition for binary tree
 * class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {

public ArrayList<TreeNode> helper(int m, int n){
    ArrayList<TreeNode> result = new ArrayList<TreeNode>();
    if(m>n){
        result.add(null);
        return result;
    }

    for(int i=m; i<=n; i++){
        ArrayList<TreeNode> ls = helper(m, i-1);
        ArrayList<TreeNode> rs = helper(i+1, n);
        for(TreeNode l: ls){
            for(TreeNode r: rs){
                TreeNode curr = new TreeNode(i);
                curr.left=l;
                curr.right=r;
                result.add(curr);
            }
        }
    }
    return result;
}

public ArrayList<TreeNode> generateTrees(int a) {
    if(a == 0){
        return new ArrayList<TreeNode>();
    }

    return helper(1, a);
}

然而,我不明白这是一个动态编程解决方案,而不仅仅是简单的递归。helper的结果不会存储在任何地方,所以某些计算不会从头开始重新计算吗


共 (0) 个答案