【每日一题】894. 所有可能的真二叉树-2024.4.2

题目:

894. 所有可能的真二叉树

给你一个整数 n ,请你找出所有可能含 n 个节点的 真二叉树 ,并以列表形式返回。答案中每棵树的每个节点都必须符合 Node.val == 0

答案的每个元素都是一棵真二叉树的根节点。你可以按 任意顺序 返回最终的真二叉树列表**。**

真二叉树 是一类二叉树,树中每个节点恰好有 02 个子节点。

示例 1:

复制代码
输入:n = 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]]

示例 2:

复制代码
输入:n = 3
输出:[[0,0,0]]

提示:

  • 1 <= n <= 20

解答:

代码:

复制代码
/**
 * 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%2==0){
            return new ArrayList<TreeNode>();
        }
        List<TreeNode>[] dp=new List[n+1];
        for(int i=0;i<=n;i++){
            dp[i]=new ArrayList<TreeNode>();
        }
        dp[1].add(new TreeNode(0));
        for(int i=3;i<=n;i+=2){
            for(int j=1;j<i;j+=2){
                for(TreeNode leftSubtree:dp[j]){
                    for(TreeNode rightSubtrees:dp[i-1-j]){
                        TreeNode root=new TreeNode(0,leftSubtree,rightSubtrees);
                        dp[i].add(root);
                    }
                }
            }
        }
        return dp[n];
    }
}

结果:

相关推荐
Magnum Lehar5 分钟前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
sss191s7 分钟前
校招 java 面试基础题目及解析
java·开发语言·面试
异常君10 分钟前
MySQL 中 count(*)、count(1)、count(字段)性能对比:一次彻底搞清楚
java·mysql·面试
wkj00137 分钟前
QuaggaJS 配置参数详解
java·linux·服务器·javascript·quaggajs
水蓝烟雨38 分钟前
[面试精选] 0094. 二叉树的中序遍历
算法·面试精选
超闻逸事44 分钟前
【题解】[UTPC2024] C.Card Deck
c++·算法
暴力求解1 小时前
C++类和对象(上)
开发语言·c++·算法
JKHaaa1 小时前
几种简单的排序算法(C语言)
c语言·算法·排序算法
让我们一起加油好吗1 小时前
【基础算法】枚举(普通枚举、二进制枚举)
开发语言·c++·算法·二进制·枚举·位运算
异常君1 小时前
MyBatis 中 SqlSessionFactory 和 SqlSession 的线程安全性深度分析
java·面试·mybatis