【每日一题】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];
    }
}

结果:

相关推荐
ADI_OP2 小时前
ADAU1452的开发教程10:逻辑算法模块
算法·adi dsp中文资料·adi dsp·adi音频dsp·adi dsp开发教程·sigmadsp的开发详解
xingzhemengyou12 小时前
C语言 查找一个字符在字符串中第i次出现的位置
c语言·算法
冰清-小魔鱼3 小时前
各类数据存储结构总结
开发语言·数据结构·数据库
sheji34163 小时前
【开题答辩全过程】以 家庭教育资源网为例,包含答辩的问题和答案
java
百***78754 小时前
Grok-4.1与GPT-5.2深度对比:技术差异、适用场景及Python集成指南
java·python·gpt
Mr -老鬼4 小时前
Java VS Rust
java·开发语言·rust
北凉军4 小时前
java连接达梦数据库,用户名是其他库的名称无法指定库,所有mapper查询的都是以用户名相同的库内的表
java·开发语言·数据库
小六子成长记4 小时前
【C++】:搜索二叉树的模拟实现
数据结构·c++·算法
汉克老师4 小时前
GESP2025年9月认证C++二级真题与解析(编程题1(优美的数字))
c++·算法·整除·枚举算法·求余·拆数