美文网首页LeetCode每日一题
LeetCode每日一题: 不同的二叉搜索树 II

LeetCode每日一题: 不同的二叉搜索树 II

作者: Patarw | 来源:发表于2020-07-29 15:39 被阅读0次

看到树这个数据结构,第一个想到的方法就是我们的老朋友——递归 了
思路,使用for循环遍历1到n,i为根节点值,i的左边为左子树,i的右边为右子树,然后进行递归回溯,把所有的可能的结果都加到trees里面,最后返回。

  • 代码:
class Solution {

public List<TreeNode> generateTrees(int n) {
       Solution s = new Solution();
       List<TreeNode> res = new ArrayList<TreeNode>();
       if(n == 0){
           return res;
       }
       return s.result(1,n);
    
}

public List<TreeNode> result(int left,int right){
   List<TreeNode> trees = new ArrayList<>();
    if(left > right){
            trees.add(null);
            return trees;
        }
        if(left == right){
            trees.add(new TreeNode(left));
            return trees;
        }
    for(int i = left;i <= right;i++){                   
       List<TreeNode> leftTrees = result(left,i-1);               
       List<TreeNode> rightTrees = result(i+1,right);                   
       for(TreeNode l : leftTrees){
          for(TreeNode r : rightTrees){
              TreeNode tree = new TreeNode(i);
              tree.left = l;
              tree.right = r;
              trees.add(tree);
         }
     }
    
    }         
     return trees;
}
}

相关文章

网友评论

    本文标题:LeetCode每日一题: 不同的二叉搜索树 II

    本文链接:https://www.haomeiwen.com/subject/wbnhrktx.html