news 2026/4/29 19:17:22

leetcode 894. All Possible Full Binary Trees 所有可能的真二叉树-耗时100

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 894. All Possible Full Binary Trees 所有可能的真二叉树-耗时100

Problem: 894. All Possible Full Binary Trees 所有可能的真二叉树

耗时100%

1和3的答案可以手写出来,5是1+(1+3)或者1+(3+1),7是1+(1+5)或者1+(5+1)或者1+(3+3),第一个1是根节点,括号内分别是左节点和右节点,然后(1+5)其中1一种情况5两种情况,所以7共2+2+1=5种情况,9可以写成1+(1+7)、1+(7+1)、1+(2+5)等

所以可以使用记忆化搜索,依次组合起来就可以得到答案,但是需要复制一遍二叉树

Code

class Solution { public: vector<TreeNode*> ret; unordered_map<int, vector<TreeNode*>> ump; TreeNode* copy(TreeNode* root, TreeNode* rt) { if(root==nullptr) return nullptr; if(rt==nullptr) { rt = new TreeNode(0); } rt->left = copy(root->left, rt->left); rt->right = copy(root->right, rt->right); return rt; } // TreeNode* rootroot; // void dfs(TreeNode* root, int n) { // if(n == 0) { // TreeNode* rt = nullptr; // rt = copy(rootroot, rt); // ret.push_back(rt); // delete root->left; // delete root->right; // root->left = nullptr; // root->right = nullptr; // return; // } // root->left = new TreeNode(0); // root->right = new TreeNode(0); // dfs(root->left, n - 2); // dfs(root->right, n - 2); // // delete root->left; // // root->left = nullptr; // // delete root->right; // // root->right = nullptr; // // dfs(root->right, n - 2); // } vector<TreeNode*> allPossibleFBT(int n) { if((n&1)==0) return {}; TreeNode* root; root = new TreeNode(0); if(n==1) { return {root}; }; TreeNode* rt = nullptr; rt = copy(root, rt); ump[1] = {rt}; root->left = new TreeNode(0); root->right = new TreeNode(0); rt = nullptr; rt = copy(root, rt); ump[3] = {rt}; if(n==3) { return ump[3]; } for(int k = 5; k <= n; k += 2) { for(int i = 1; i <= (k-1)/2; i+=2) { for(TreeNode* l : ump[i]) { for(TreeNode* r : ump[k - i - 1]) { if(2*i!=k-1) { root = new TreeNode(0); root->left = l; root->right = r; // rt = nullptr; // rt = copy(root, rt); ump[k].push_back(root); root = new TreeNode(0); root->left = r; root->right = l; // rt = nullptr; // rt = copy(root, rt); ump[k].push_back(root); } else { root = new TreeNode(0); root->left = l; root->right = r; // rt = nullptr; // rt = copy(root, rt); ump[k].push_back(root); } } } } } // dfs(root, n - 1); return ump[n]; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 15:39:42

天翼云全栈赋能OpenClaw,打造会干活的专属AI!

最近科技圈的新顶流非OpenClaw (原Moltbot/Clawdbot) 莫属&#xff01;不同于只会聊天的AI&#xff0c;它是真正能“上手干活”的全功能智能体——授权后能操作文件、运行程序、处理数据&#xff0c;还能记住长期目标和对话历史&#xff0c;7x24小时在线当你的专属“数字员工”…

作者头像 李华
网站建设 2026/4/18 5:44:01

硕士/博士研究生避坑指南

结合亲身经历和周围所见 小镇做题家3年硕士4年菜鸡博士的教训总结 一个课题组就是一个弱肉强食的社会 希望大家保护好手无寸铁的自己 本水博也有一定的局限性&#xff0c;欢迎大家补充批评 1.文章除了一作&#xff0c;别的挂名没有任何意义 2.如果组内研究方向围绕同一问题展开…

作者头像 李华
网站建设 2026/4/18 2:34:24

科研新手如何读文献?从“乱读”到“会读”

不少同学在后台私信我&#xff0c;问我是怎么高效读文献、快速抓重点的。说实话&#xff0c;我一开始读文献的方法也挺“笨”的&#xff1a;几乎完全依赖翻译软件&#xff0c;逐句通读&#xff0c;看起来很努力&#xff0c;但效率不高&#xff0c;很多内容看完很快就忘了。后来…

作者头像 李华
网站建设 2026/4/29 18:11:11

伯明翰Oracle项目遭遇数据清洗难题和资源短缺困境

伯明翰市议会最新审计委员会会议提出的问题显示&#xff0c;议员们持续担忧该项目能否按时上线&#xff0c;同时对技术和人员配备问题以及是否建立了有效的变更管理方案表示关切。 在1月底举行的审计委员会会议上&#xff0c;议员们就Oracle重新实施项目面临的风险向审计机构G…

作者头像 李华
网站建设 2026/4/23 15:24:39

Thinkphp和Laravel框架的城市租房需求数据分析系统的设计与实现爬虫可视化

目录 设计思路系统功能技术实现 开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 设计思路 城市租房需求数据分析系统采用ThinkPHP和Laravel框架开发&#xff0c;结合爬虫技术和数据可视化功能。系统通过爬取主流租房平台数据&…

作者头像 李华
网站建设 2026/4/26 21:25:06

供应链数智化如何落地,有哪些关键常见?

交通运输部等八部门联合印发的《加快培育交通物流领军企业 提升产业链供应链服务保障能力行动方案》明确提出&#xff0c;要加速交通物流数智化赋能&#xff0c;推动大数据、人工智能等新一代信息技术集成应用&#xff0c;实现供应链各环节信息互联共享。供应链数智化落地的核心…

作者头像 李华