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

时间:2017-01-09 19:43:19

标签: java dynamic-programming

我正在研究考试的练习题,即编写一个程序来生成存储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);
}

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

0 个答案:

没有答案