当前位置: 首页 > article >正文

【算法题】95. 不同的二叉搜索树 II

题目

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

示例 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
 

题解

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> allTrees = new LinkedList<TreeNode>();
        if (start > end) {
            allTrees.add(null);
            return allTrees;
        }

        // 枚举可行根节点
        for (int i = start; i <= end; i++) {
            // 获得所有可行的左子树集合
            List<TreeNode> leftTrees = generateTrees(start, i - 1);

            // 获得所有可行的右子树集合
            List<TreeNode> rightTrees = generateTrees(i + 1, end);

            // 从左子树集合中选出一棵左子树,从右子树集合中选出一棵右子树,拼接到根节点上
            for (TreeNode left : leftTrees) {
                for (TreeNode right : rightTrees) {
                    TreeNode currTree = new TreeNode(i);
                    currTree.left = left;
                    currTree.right = right;
                    allTrees.add(currTree);
                }
            }
        }
        return allTrees;
    }
}

来自力扣官方题解


http://www.kler.cn/a/231442.html

相关文章:

  • 【支持向量机(SVM)】:相关概念及API使用
  • 详细分析ipvsadm负载均衡的命令
  • AWD脚本编写_1
  • 【电子设计】按键LED控制与FreeRTOS
  • 记录java Collections.sort踩的坑
  • day-17 反转字符串中的单词
  • ChatPromptTemplate和AI Message的用法
  • C语言第二十弹---指针(四)
  • vue3-内置组件-KeepAlive
  • Android:IntentActivity,Service,BroadcastReceiver
  • FANUC机器人外部远程启动的相关参数设置示例
  • docker proxy 【docker 代理】
  • ChatGPT实战100例 - (14) 打造AI编程助手 Code Copilot
  • 相机图像质量研究(8)常见问题总结:光学结构对成像的影响--工厂调焦
  • BUGKU-WEB 留言板
  • 大数据环境搭建(一)-Hive
  • FFMPEG推流到B站直播
  • VRRP配置
  • 零基础学编程系列,从入门到精通,中文编程开发语言工具下载,编程构件容器件之控制面板构件用法
  • 多线程JUC:多线程的实现和常用成员方法(守护、礼让、插入线程)
  • 2024阿里云GPU服务器租用价格表(包月/按小时/学生价)
  • SpringBoot - 不加 @EnableCaching 标签也一样可以在 Redis 中存储缓存?
  • C++之std::tuple(一) : 使用精讲(全)
  • 【Qt】Android上运行keeps stopping, Desktop上正常
  • npm后Truffle找不到命令(ubantu20系统)
  • MATLAB | 绘图复刻(十四) | 右侧对齐桑基图,及工具函数SSankey更新