leetcode 894. 所有可能的满二叉树
时间:2021-09-04
本文章向大家介绍leetcode 894. 所有可能的满二叉树,主要包括leetcode 894. 所有可能的满二叉树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。
返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。
答案中每个树的每个结点都必须有 node.val=0。
你可以按任何顺序返回树的最终列表。
示例:
输入:7
输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]]
解释:
提示:
1 <= N <= 20
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/all-possible-full-binary-trees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
dp数组记录从1-n个节点所构成的二叉树
1:创建一个长度为你+ 1的list的数组, 其每一项代表 i 个数所构成的树。
2:当计算 i 个节点构成的二叉树的个数的时候,
其左节点的个数分别为 (1, 3, 5, 7...i - 2)
其右节点的对应的个数分别为 (i - 2, i - 4, i - 6, i - 8...1)
所以从数组中取出对应的list集合,组合构建即可。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<TreeNode> allPossibleFBT(int n) { if ((n & 1) == 0) { return Collections.emptyList(); } List[] arr = new ArrayList[n + 1]; arr[1] = new ArrayList<>(1); arr[1].add(new TreeNode(0)); for (int i = 3; i <= n; i = i + 2) { List<TreeNode> list = new ArrayList<>(); arr[i] = list; for (int j = 1; j < i; j = j + 2) { for (TreeNode right : (List<TreeNode>) arr[i - j - 1]) { for (TreeNode left : (List<TreeNode>) arr[j]) { TreeNode node = new TreeNode(0); node.right = right; node.left = left; list.add(node); } } } } return arr[n]; } }
原文地址:https://www.cnblogs.com/wangzaiguli/p/15227950.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 数组属性和方法
- 【python实现卷积神经网络】批量归一化层实现
- 【python实现卷积神经网络】池化层实现
- srand()和rand(),生成随机数,留给我自己看
- 【python实现卷积神经网络】padding2D层实现
- mybatis之全局配置文件中的标签
- 【python实现卷积神经网络】Flatten层实现
- Shiro框架学习笔记(二)基于内置ini文件的身份认证
- 【python实现卷积神经网络】上采样层upSampling2D实现
- mybatis映射文件之获取自增的主键
- django实战(二)--带多字段模糊查询的分页(也是不容易)
- 【python实现卷积神经网络】Dropout层实现
- 【python实现卷积神经网络】激活层实现
- django实战(三)--删除和批量删除
- 【python实现卷积神经网络】定义训练和测试过程
- 最短路径算法java