一. 问题描述

给定一个整数 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;
}
}

最新文章

  1. 我收录整理的优秀OC技术类文章
  2. 用JS做的时钟
  3. Java构建工具Ant小记(一)
  4. (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
  5. JavaScript高级程序设计40.pdf
  6. ubuntu texlive 中文的配置方法
  7. php 常用代码段
  8. ReentrantReadWriteLock读写锁的使用1
  9. 014_zk路径过滤分析
  10. linux 学习笔记六 tail 命令
  11. Django中提供的6种缓存方式
  12. UBANTU zongjie
  13. NOIp模拟赛 现实(DP 拓扑)
  14. 接口文档管理系统mindoc安装手册
  15. sourcetree 添加私钥
  16. PAT 1046 划拳(15)(代码)
  17. C# 泛型的简单理解(安全、集合、方法、约束、继承)
  18. nginx fastcgi.conf的参数
  19. HTML5、CSS3与响应式Web设计入门(2)
  20. 从CM刷机过程和原理分析Android系统结构

热门文章

  1. mysql-系统表的使用
  2. Django入门(下)
  3. go 构造切片slice
  4. springboot项目在IDEA根据不同的开发人员读取不同的配置文件
  5. ASP.NET Core分布式项目-3.oauth2与open id connect 对比
  6. 10分钟学会使用Markdown绘制UML时序图
  7. 在一台服务器上启动多个Broker
  8. 一个炒鸡好用的pdf阅读器
  9. ActivityMQ消息中间件【待完成】
  10. gitea configure