[路飞]_leetcode-95-不同的二叉搜索树 II

简介: leetcode-95-不同的二叉搜索树 II

网络异常,图片无法展示
|


[题目地址][B站地址]


给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1n 互不相同的不同 二叉搜索树 **。可以按 任意顺序 返回答案。


示例 1:


网络异常,图片无法展示
|


输入: n = 3
输出: [[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
复制代码


示例 2:


输入: n = 1
输出: [[1]]
复制代码


提示:


  • 1 <= n <= 8


解题思路


本题要求我们根据给定整数 n 创建 1~nn 个节点组成的不同的二叉搜索树,并以数组形式返回。


根据实例1 中我们可以看到,给定整数 3 创建的二叉搜索树其实可以拆解为以 123 为根的二叉搜索树,那它们的左右子树又可以以同理进行拆解,这样递归到区间内只有一个数字的时候,就是一个叶子节点,区间内没有数字的时候,就是 null


有了以上推导,我们就可以通过给定区间,递归创建每个值为根的二叉搜索树,并在回溯的过程中进行树的组装。


每个值为根节点的树的组装其实就是所有左子树的可能与所有右子树的可能进行匹配,同时以当前值为根节点,组成的二叉搜索树。


代码实现


var generateTrees = function(n) {
  // 传入区间,返回可以构建的二叉搜索树
  function buildTree(l,r){
    // 如果区间内只有一个数字,则返回一个节点
    if(l===r) return [new TreeNode(l)]
    // 如果区间中没有数字,返回null
    if(l>r) return [null]
    // 初始化可创建树的结果数组
    const res = [];
    for(let i = l;i<=r;i++){
      // 获取可创建的左子树数组
      const left = buildTree(l,i-1),
      // 获取可创建的右子树数组
      right = buildTree(i+1,r);
      // 组合所有可能的二叉搜索树
      for(let j = 0;j<left.length;j++){
        const leftNode = left[j]
        for(let k = 0;k<right.length;k++){
          res.push(new TreeNode(i,leftNode,right[k]))
        }
      }
    }
    // 返回可创建的树的数组
    return res;
  }
  // 调用构建二叉搜索树方法并返回返回值
  return buildTree(1,n)
};
复制代码


至此我们就完成了 leetcode-95-不同的二叉搜索树 II


如有任何问题或建议,欢迎留言讨论!

相关文章
|
3月前
leetcode-96:不同的二叉搜索树
leetcode-96:不同的二叉搜索树
21 0
|
3月前
|
Java C++ Python
leetcode-669:修剪二叉搜索树
leetcode-669:修剪二叉搜索树
22 1
|
3月前
|
C++ Python
leetcode-108:将有序数组转换为二叉搜索树
leetcode-108:将有序数组转换为二叉搜索树
22 0
|
3月前
|
Java C++ Python
leetcode-538:把二叉搜索树转换为累加树
leetcode-538:把二叉搜索树转换为累加树
22 0
|
11天前
Leetcode1038. 从二叉搜索树到更大和树(每日一题)
Leetcode1038. 从二叉搜索树到更大和树(每日一题)
|
2月前
|
Java
LeetCode题解-二叉搜索树中第K小的元素-Java
LeetCode题解-二叉搜索树中第K小的元素-Java
12 0
|
3月前
|
算法
代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树
代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树
30 0
|
3月前
|
存储 算法 测试技术
【深度优先】LeetCode1932:合并多棵二叉搜索树
【深度优先】LeetCode1932:合并多棵二叉搜索树
|
3月前
leetcode-1382:将二叉搜索树变平衡
leetcode-1382:将二叉搜索树变平衡
19 0
|
3月前
|
Go
golang力扣leetcode 96. 不同的二叉搜索树
golang力扣leetcode 96. 不同的二叉搜索树
16 0