力扣95.不同的二叉搜索树||

  1.  res是什么?是树的根节点集合。
  2. 为什么res可以写在递归函数里,而不是声明为全局变量?res存的是每一层的结果,每一层的结果最后会return给上层节点,所以res其实相当于临时变量。
  3. 为什么递归可以算出结果?对根节点从1到n循环:循环内部递归算出根节点左右两边子树的二叉搜索树,再把这个结果排列组合接在根节点的左右两边。
  4. 一定要明白递归函数的定义:算出所有不同的二叉搜索树,即题目要求。相信递归可以做到这件事情,只要把当前节点该做的事做好就行。
class Solution {
    public List<TreeNode> generateTrees(int n) {
        if(n==0) return new LinkedList<>();
        return bulid(1,n);
    }
    public List<TreeNode> bulid(int lo,int hi){
        LinkedList<TreeNode> res=new LinkedList<>();
        if(lo>hi){
            res.add(null);
            return res;
        }
        for(int i=lo;i<=hi;i++){
            List<TreeNode> leftTree=bulid(lo,i-1);
            List<TreeNode> rightTree=bulid(i+1,hi);
            for(TreeNode left:leftTree){
                for(TreeNode right:rightTree){
                    TreeNode root=new TreeNode(i);
                    root.left=left;
                    root.right=right;
                    res.add(root);
                }
            }
        }
        return res;
    }
}

 

posted @ 2021-12-05 23:10  开心码码乐  阅读(47)  评论(0)    收藏  举报