LeetCode-095-不同的二叉搜索树 II
不同的二叉搜索树 II
题目描述:给你一个整数
n,请你生成并返回所有由n个节点组成且节点值从1到n互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。二叉搜索树(Binary Search Tree):又称二叉排序树,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:递归法
首先,当n为0的时候,结果是一棵空树,直接返回空的list。
当n大于0的时候,使用递归的方法来分别获取左右子树,递归过程如下:
- 所有节点都可以作为根节点,也就是遍历从1到n的所有值作为根节点,当前根节点为i;
- 然后i左边的所有的值递归调用方法作为i的左子树;
- i右边的所有的值递归调用方法作为i的右子树;
- 最后把根节点i和相应的左右子树拼成一棵树,放到结果集中。
最后,返回结果集即为所有可能的二叉搜索树。
import com.kaesar.leetcode.TreeNode;
import java.util.ArrayList;
import java.util.List;
public class LeetCode_095 {
/**
* 递归
*
* @param n
* @return
*/
public static List<TreeNode> generateTrees(int n) {
// 当n为0的时候,是一棵空树
if (n == 0) {
return new ArrayList<>();
}
return generateTrees(1, n);
}
private static List<TreeNode> generateTrees(int start, int end) {
List<TreeNode> allTrees = new ArrayList<>();
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 leftTree : leftTrees) {
for (TreeNode rightTree : rightTrees) {
TreeNode root = new TreeNode(i);
root.left = leftTree;
root.right = rightTree;
allTrees.add(root);
}
}
}
return allTrees;
}
public static void main(String[] args) {
for (TreeNode generateTree : generateTrees(3)) {
generateTree.print();
System.out.println();
}
}
}
【每日寄语】 莫等闲,白了少年头,空悲切!
LeetCode-095-不同的二叉搜索树 II的更多相关文章
- Java实现 LeetCode 95 不同的二叉搜索树 II(二)
95. 不同的二叉搜索树 II 给定一个整数 n,生成所有由 1 - n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1, ...
- LeetCode 95——不同的二叉搜索树 II
1. 题目 2. 解答 以 \(1, 2, \cdots, n\) 构建二叉搜索树,其中,任意数字都可以作为根节点来构建二叉搜索树.当我们将某一个数字作为根节点后,其左边数据将构建为左子树,右边数据将 ...
- Leetcode 95.不同的二叉搜索树II
不同的二叉搜索树2 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null ...
- [LeetCode] 95. 不同的二叉搜索树 II ☆☆☆(递归,n个数组成的所有二叉搜索树)
https://leetcode-cn.com/problems/unique-binary-search-trees-ii/solution/xiang-xi-tong-su-de-si-lu-fe ...
- [LeetCode] 95. 不同的二叉搜索树 II
题目链接 : https://leetcode-cn.com/problems/unique-binary-search-trees-ii/ 题目描述: 给定一个整数 n,生成所有由 1 ... n ...
- 95. 不同的二叉搜索树 II
95. 不同的二叉搜索树 II 题意 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 解题思路 这道题目是基于不同的二叉搜索树进行改进的: 对于连续整数序列[left, ri ...
- 不同的二叉搜索树&II
不同的二叉搜索树 只要求个数,递推根节点分割左右子树即可 class Solution { public int numTrees(int n) { int []dp=new int[n+1]; fo ...
- 【JavaScript】Leetcode每日一题-二叉搜索树的范围和
[JavaScript]Leetcode每日一题-二叉搜索树的范围和 [题目描述] 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例1: 输入: ...
- 【python】Leetcode每日一题-二叉搜索树节点最小距离
[python]Leetcode每日一题-二叉搜索树节点最小距离 [题目描述] 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 . 示例1: 输入:root = [4 ...
随机推荐
- Swift逻辑分支
一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二. if分支语句 和OC中if语句有一定的区别 判断句可以不加() 在Swift的判断句中必须有 ...
- webpack4 处理CSS
本篇讲解webpack4中打包css的应用.v4 版本和 v3 版本并没有特别的出入. 教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> 原文地址. 评论或者 ...
- undefined index: php中提示Undefined ...
我们经常接收表单POST过来的数据时报Undefined index错误,如下:$act=$_POST['action'];用以上代码总是提示Notice: Undefined index: act ...
- 一致性协议之ZAB
前言 一致性协议 包括 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是所有一致性协议中生产环境中应用最多的了.为什么呢?因为他是为 Zookeeper 设计的 ...
- 它来了,那个最帅的男人来了 Linux常用命令精华讲解 中部
Linux 相对于上部,今天这些内容有点干巴 -ls 列表显示目录内容 -alias 设置别名 -du 统计目录及文件空间占用情况 -mkdir 创建新目录 - ...
- python基础——异常处理、递归
异常处理 while True: try: num1 = int(input('num1:')) num2 = int(input('num2:')) result = num1 + num2 exc ...
- Solution -「多校联训」光影交错
\(\mathcal{Description}\) Link. 一个游戏包含若干次卡牌抽取,每次以 \(p_l\) 的概率得到 \(+1\),\(p_d\) 的概率得到 \(-1\),否则得到 ...
- Solution -「LGR-087」「洛谷 P6860」象棋与马
\(\mathcal{Description}\) Link. 在一个 \(\mathbb R^2\) 的 \((0,0)\) 处有一颗棋子,对于参数 \(a,b\),若它当前坐标为 \((x ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第12章 - 部署dashboard插件
文章目录 1.12.0.创建namespace 1.12.1.创建Dashboard rbac文件 1.12.2.创建dashboard文件 1.12.3.查看pod以及svc 1.12.4.获取 d ...
- Redis 源码简洁剖析 16 - 客户端
整体概述 客户端属性 套接字描述符 标志 输入缓冲区 命名及命令参数 命令的实现函数 输出缓冲区 客户端的创建与关闭 创建普通客户端 关闭普通客户端 参考链接 Redis 源码简洁剖析系列 整体概述 ...