Leetcode 95.不同的二叉搜索树II
时间:2019-09-02
本文章向大家介绍Leetcode 95.不同的二叉搜索树II,主要包括Leetcode 95.不同的二叉搜索树II使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述:
给定一个整数 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]
]
上一题(Leetcode94.不同的二叉搜索树)是只用算出能生成的二叉树的个数而并不需要知道具体二叉树长什么样,而这道题是基于上一题的升级版,需要具体的求出不同的二叉树。
算法一:递归
求出所有树依然要同上一题一样,分别将 1 ~ n 的所有数作为根节点。
递归这个算法可以直接通过看代码理解具体解题思路,也最好理解,所以直接上代码吧。
public List<TreeNode> generateTrees(int n) { List<TreeNode> trees = new ArrayList<TreeNode>(); if (n == 0) { return trees;//没有节点则返回空树 } return getTrees(1, n); } private List<TreeNode> getTrees(int start, int end) { List<TreeNode> trees = new ArrayList<TreeNode>(); if (start > end) { trees.add(null); return trees; } //start=end说明只有一个节点,将这个节点作为一棵树加入 if (start == end) { TreeNode tree = new TreeNode(start); trees.add(tree); return trees; } //从i=start到end作为根节点 for (int i = start; i <= end; i++) { //得到所有左子树 List<TreeNode> leftTrees = getTrees(start, i - 1); //得到所有右子树 List<TreeNode> rightTrees = getTrees(i + 1, end); //用循环,将不同的左子树与右子树分别相组合 for (TreeNode leftTree : leftTrees) { for (TreeNode rightTree : rightTrees) { TreeNode root = new TreeNode(i); root.left = leftTree;
root.right = rightTree;
trees.add(root); } } } return trees; }
(^_^后续方法待更新...)
原文地址:https://www.cnblogs.com/Sherlockmmc/p/11449116.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【-Flutter绘制集录-】第一画: 随机对称点头像
- TorchScript使用的注意事项和常见错误
- Scoped 样式穿透
- 你不知道的this(1)
- PyTorch模型转TVM模型全流程记录
- 一次 Node.js http 连接无法复用的问题排查
- 基于UE4/Unity绘制地图基础元素-线(上篇)
- 编码、R 与 Windows (一)
- 【5分钟玩转Lighthouse】Python绘制图表
- Matt Dowle 演讲节选(二)
- 帝国CMS的sitemap.xml设置和生成
- 【推荐】搭建你的免费 R 云端服务器
- ShareX 对接tu.my图床实现截图和图片自动上传
- 【技巧】如何快速按照日期分组
- 为什么 ggplot2 不支持两个 y 轴?