一. 问题描述

给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。

示例:

输入: 3

输出:

[

[1,null,3,2],

[3,2,null,1],

[3,1,null,null,2],

[2,1,3],

[1,null,2,null,3]

]

解释:

以上的输出对应以下 5 种不同结构的二叉搜索树:

1         3     3      2      1

\       /     /      / \      \

3     2     1      1   3      2

/     /       \                 \

2     1         2                 3

二. 解题思路

本题思路:采用递归+深度搜索的方式进行构建二叉搜索树。

步骤一:运用for循环依次将1-n当成根节点i进行搜索。

步骤二:当构建左子树时,递归函数(frist 到i-1),构建右子树时,递归函数(i+1到end)。

步骤三:当在递归函数的最底部时,需要将每一层节点子树的可能性添加到list列表中,并返回给上一层。

步骤四:最终遍历结束,返回最终list表。

三. 执行结果

执行用时 :2 ms, 在所有 java 提交中击败了99.49%的用户

内存消耗 :37.1 MB, 在所有 java 提交中击败了90.28%的用户

四. Java代码

class Solution {
public List<TreeNode> generateTrees(int n) {
if(n==0)
{
List<TreeNode> result=new ArrayList<TreeNode>();
return result;
} List<TreeNode> result=new ArrayList<TreeNode>();
result=Tree(1,n);
return result;
}
public List<TreeNode> Tree(int first,int end) {
List<TreeNode> list=new ArrayList<TreeNode>();
if(first>end) list.add(null);
for(int i=first;i<=end;i++)
{
List<TreeNode> left=Tree(first,i-1);
List<TreeNode> right=Tree(i+1, end);
for(int m=0;m<left.size();m++ )
{
for(int n=0;n<right.size();n++)
{
TreeNode newroot=new TreeNode(i);
newroot.left=left.get(m);
newroot.right=right.get(n);
list.add(newroot);
}
} }
return list;
}
}

第95题:不同的二叉搜素树II的更多相关文章

  1. 95题--不同的二叉搜索树II(java、中等难度)

    题目描述:给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 . 示例如下: 分析:这一题需要对比LeetCode96题来分析:https://www.cnblogs.com/K ...

  2. LeetCode 95 | 构造出所有二叉搜索树

    今天是LeetCode专题第61篇文章,我们一起来看的是LeetCode95题,Unique Binary Search Trees II(不同的二叉搜索树II). 这道题的官方难度是Medium,点 ...

  3. 数据结构:JAVA_二叉数查找树基本实现(中)

    数据结构:二叉数查找树基本实现(JAVA语言版) 1.写在前面 二叉查找树得以广泛应用的一个重要原因是它能保持键的有序性,因此我们可以把它作为实现有序符号表API中的众多方法的基础. 也就是说我们构建 ...

  4. 二叉平衡查找树AvlTree(C实现)

    二叉平衡查找树即是一棵树中所有节点的左右子树高度差不超过1的查找树 头文件—————————————————————————————— #ifndef _AVLTREE_H_ #define _AVL ...

  5. 树-二叉搜索树-AVL树

    树-二叉搜索树-AVL树 树 树的基本概念 节点的度:节点的儿子数 树的度:Max{节点的度} 节点的高度:节点到各叶节点的最大路径长度 树的高度:根节点的高度 节点的深度(层数):根节点到该节点的路 ...

  6. 剑指offer-第四章解决面试题思路(二叉收索树和双向链表)

    题目:输入一个二叉收索树,将二叉搜索树转换成排序的双向链表.要求不能创建节点,只能将链表中的指针进行改变. 将复杂的问题简单化:思路:二叉收索树,本身是一个排序结构,中序遍历二叉收索树就可以得到一组排 ...

  7. 96题--不同的二叉搜索树(java、中等难度)

    题目描述:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例如下: 分析:本题可用动态规划的方法求解. 设 dp[n] 表示以 1 ... n 为节点组成的二叉搜索树的种类 ...

  8. [LeetCode] 272. Closest Binary Search Tree Value II 最近的二叉搜索树的值 II

    Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...

  9. (4) 二叉平衡树, AVL树

    1.为什么要有平衡二叉树? 上一节我们讲了一般的二叉查找树, 其期望深度为O(log2n), 其各操作的时间复杂度O(log2n)同时也是由此决定的.但是在某些情况下(如在插入的序列是有序的时候), ...

随机推荐

  1. docker下部署服务

    一.zabbix部署 需求: 因最近项目过多,人力监控耗费时间,打算部署一个zabbix,但又不想部署在宿主机上,就想起了docker,docker快速的移植性是最大的亮点,好了,言归正传开始干. 部 ...

  2. Yii2 设计模式——单例模式

    单例模式 模式定义 单例模式确保一个类只有一个实例,并提供一个全局访问点.当现实中只需要一个对象,或者为了节省系统资源,又或者是为了共享数据的时候可以使用单例模式. 代码实现 我们先来看看单例模式的标 ...

  3. react封装通用tab组件

    import React, { Component } from 'react' import PropTypes from 'prop-types' import _ from 'lodash' i ...

  4. eclipse智能提示报错(to avoid the message, disable the...)

    然后这里可能会再报别的错误  我的做法是   再重新将 code recommenders 打开 ********************************** 为什么会出现 这样错误呢 ? 简 ...

  5. Ctrl+R快速启动应用程序

    1.打开注册表 Ctrl+R搜索框中键入“regedit”,回车打开注册表 2.找到HKEY_LOCAL_MACHINE中的如下路径 HKEY_LOCAL_MACHINE\SOFTWARE\Micro ...

  6. c# winfrom 子窗体分屏显示

    参考博客:https://blog.csdn.net/kailan818/article/details/8517126 实现代码: private void button1_Click(object ...

  7. 减少打包组件vue.config.js——Webpack的externals的使用

    vue.config.js module.exports = { configureWebpack:{ externals: { vue: 'Vue', 'vue-router':'VueRouter ...

  8. JS基础_函数作用域

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. JS/js是什么?

    JavaScript 是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: ECMAScript,由 ECMA-262 定义,提供核心语言功能; 文档对象模型(DOM),提供访问和操作网页 ...

  10. js数组破坏性和非破坏性方法

    数组原型方法:破坏性.会改变数组. shift().unshift().pop().push().splice();resver(),sort().在对数字排序的时候不能用原来的方法了,那样会导致值溢 ...