码迷,mamicode.com
首页 > 其他好文 > 详细

不同的二叉搜索树&II

时间:2019-03-25 12:09:33      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:lse   src   左右子树   递推   span   mamicode   new   搜索   val   

不同的二叉搜索树

只要求个数,递推根节点分割左右子树即可

class Solution {
    public int numTrees(int n) {
       int []dp=new int[n+1];
       for(int i=1;i<=n;i++){
           if(i==1||i==2)
               dp[i]=i;
           else{
               for(int j=1;j<=i;j++)
                   if(j>1&&j<i)//有左子树和右子树
                       dp[i]+=dp[j-1]*dp[i-j];
                   else if(j==1)//只有右子树
                       dp[i]+=dp[i-j];
                   else
                       dp[i]+=dp[j-1];
           }
       }
       return dp[n];
    }
}

不同的二叉搜索树 II

要求求具体的树,还是同上思想

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
public List<TreeNode> generateTrees(int n) {
    if(n == 0)
        return new LinkedList<TreeNode>();
    return generateTrees(1,n);
}
public List<TreeNode> generateTrees(int start,int end) {
    List<TreeNode> res = new LinkedList<TreeNode>();
    if(start > end){
        res.add(null);
        return res;
    }
    for(int i = start;i <= end;i++){
        List<TreeNode> subLeftTree = generateTrees(start,i-1);
        List<TreeNode> subRightTree = generateTrees(i+1,end);
        for(TreeNode left : subLeftTree){
            for(TreeNode right : subRightTree){
                TreeNode node = new TreeNode(i);
                node.left = left;
                node.right = right;
                res.add(node);
            }
        }                        
    }
    return res;
}
}

 技术图片

不同的二叉搜索树&II

标签:lse   src   左右子树   递推   span   mamicode   new   搜索   val   

原文地址:https://www.cnblogs.com/yuelien/p/10592940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!