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

95. 不同的二叉搜索树 II

时间:2020-05-05 10:57:51      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:返回   搜索   双层   array   bin   art   有一个   技术   mic   

技术图片

 

 用递归即可

因为是二叉搜索树,也就是根大于左子节点,根小于右子节点,这就好办了,对于每个可能的根节点,求出所有左右子树的集合,双循环配对

/**
 * 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) {
         List<TreeNode> ans = new ArrayList<TreeNode>();
        if (n == 0) {
            return ans;
        }
        int start=1;
        int end=n;
        return getans(start,end);
    }
     public List<TreeNode> getans(int start,int end)//显然,结果里,只需要放二叉树的根就好
     {
          List<TreeNode> ans = new ArrayList<TreeNode>();//结果
          if(start>end)//没有点,返回null
          {
              ans.add(null);
              return ans;
          }
          if(start==end)//只有一个点,返回这个点为根节点的树就好
          {
            TreeNode T=new TreeNode(start);
            ans.add(T);
            return ans;
          }
          for(int i=start;i<=end;i++)//i是可能的根,所有循环,找的是所有的根
          {
              List<TreeNode> lefts=getans(start,i-1);//对于每个根,找所有可能的左右子树
              List<TreeNode> rights=getans(i+1,end);
        for (TreeNode leftTree : lefts) //双层循环,把以i为节点的,左子树,右子树结合为二叉搜索树,加到ans里面
            for (TreeNode rightTree : rights)
            {
                TreeNode root=new TreeNode(i);//当前节点作为根节点
                root.left=leftTree;
                root.right=rightTree;
                ans.add(root);//结果集合里面加上一个结果
            }
        }
        return  ans;
          }

     }

  

95. 不同的二叉搜索树 II

标签:返回   搜索   双层   array   bin   art   有一个   技术   mic   

原文地址:https://www.cnblogs.com/lzh1043060917/p/12829596.html

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