news 2026/8/29 10:11:48

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/8/26 16:29:54

我是如何用寒假7天写完初稿的

之前我总是抱着一种心态&#xff0c;觉得论文一定要搞原创&#xff0c;结果一直憋不出字&#xff0c;论文进度越拖越慢&#xff0c;后来换了思路反而越写越顺1️⃣找文献 在z网上找3-5篇与你的研究主题、方法或理论框架高度契合的核心期刊。一是为了参考行文逻辑&#xff0c;二…

作者头像 李华
网站建设 2026/8/21 17:13:10

挑战秒级触达:百万级企微外部群推送的性能调优实战

QiWe开放平台 个人名片 API驱动企微自动化&#xff0c;让开发更高效 核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景 官方站点&#xff1a;https://www.qiweapi.com 团队定位&#xff1a;专注企微API生态的技术服务团队 对接…

作者头像 李华
网站建设 2026/8/22 5:31:50

摆脱论文困扰!专科生专属AI平台 —— 千笔ai写作

你是否曾为论文选题发愁&#xff1f;是否在深夜面对空白文档无从下笔&#xff1f;是否反复修改却总对表达不满意&#xff1f;专科生的你&#xff0c;常常面临时间紧、任务重、资源少的多重压力&#xff0c;论文写作成了最头疼的难题。别再独自挣扎&#xff0c;现在&#xff0c;…

作者头像 李华