当前位置: 首页 > news >正文

今日算法:617,合并二叉树

class Solution { public: TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) { // 终止条件:一个为空,直接返回另一个 if(root1 == nullptr) return root2; if(root2 == nullptr) return root1; // 当前节点值相加 TreeNode* node = new TreeNode(root1->val + root2->val); // 递归构建左右子树,挂载到当前节点 node->left = mergeTrees(root1->left, root2->left); node->right = mergeTrees(root1->right, root2->right); return node; } };

进行递归注意左右子树的存在;

class Solution { public: TreeNode*addtree(TreeNode*node1,TreeNode*node2) { if(node1==nullptr&&node2==nullptr) return node1;//终止条件 TreeNode*node=new TreeNode(0); if(node1&&node2) { node->val=node1->val+node2->val; } else if(node1&&node2==nullptr) { node->val=node1->val; } else if(node1==nullptr&&node2) { node->val=node2->val; } //遍历左右子树 //左 // if(node1->left||node2->left) // node->left=addtree(node1->left,node2->left); // if(node1->right||node2->right) // node->right=addtree(node->right,node2->right); if(node1 != nullptr && node2 != nullptr) node->left = addtree(node1->left, node2->left); else if(node1 != nullptr) node->left = addtree(node1->left, nullptr); else if(node2 != nullptr) node->left = addtree(nullptr, node2->left); // 右子树 if(node1 != nullptr && node2 != nullptr) node->right = addtree(node1->right, node2->right); else if(node1 != nullptr) node->right = addtree(node1->right, nullptr); else if(node2 != nullptr) node->right = addtree(nullptr, node2->right); return node; } TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) { //前序遍历进行 return addtree(root1,root2); } };

理解递归的用法;

下面是非递归

class Solution { public: TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) { //层序遍历 //迭代法 if(root1==nullptr) return root2; if(root2==nullptr) return root1; queue<TreeNode*> que; que.push(root1); que.push(root2); while(!que.empty()) { TreeNode*node1=que.front(); que.pop(); TreeNode*node2=que.front(); que.pop(); node1->val+=node2->val; if(node1->left!=nullptr&&node2->left!=nullptr) { que.push(node1->left); que.push(node2->left); } if(node1->right!=nullptr&&node2->right!=nullptr) { que.push(node1->right); que.push(node2->right); } //特殊情况 if(node1->left==nullptr&&node2->left) node1->left=node2->left; if(node1->right==nullptr&&node2->right) node1->right=node2->right; //因为本身返回的就是node1,所以不用对node1左右存在node2不存在做处理 } return root1; } };

使用一个队列而已

下面是使用3个队列进行解题

class Solution { public: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { if (t1 == nullptr) { return t2; } if (t2 == nullptr) { return t1; } auto merged = new TreeNode(t1->val + t2->val); auto q = queue<TreeNode*>(); auto queue1 = queue<TreeNode*>(); auto queue2 = queue<TreeNode*>(); q.push(merged); queue1.push(t1); queue2.push(t2); while (!queue1.empty() && !queue2.empty()) { auto node = q.front(), node1 = queue1.front(), node2 = queue2.front(); q.pop(); queue1.pop(); queue2.pop(); auto left1 = node1->left, left2 = node2->left, right1 = node1->right, right2 = node2->right; if (left1 != nullptr || left2 != nullptr) { if (left1 != nullptr && left2 != nullptr) { auto left = new TreeNode(left1->val + left2->val); node->left = left; q.push(left); queue1.push(left1); queue2.push(left2); } else if (left1 != nullptr) { node->left = left1; } else if (left2 != nullptr) { node->left = left2; } } if (right1 != nullptr || right2 != nullptr) { if (right1 != nullptr && right2 != nullptr) { auto right = new TreeNode(right1->val + right2->val); node->right = right; q.push(right); queue1.push(right1); queue2.push(right2); } else if (right1 != nullptr) { node->right = right1; } else { node->right = right2; } } } return merged; } };

把两颗树进行放到两个队列中,进行相加到第三个队列,对左右子树进行处理,和我解释的递归解释那个写法很像;

http://www.jsqmd.com/news/819737/

相关文章:

  • PromptRek:基于Git理念的AI提示词版本控制与评估平台实践
  • 嵌入式开发中CHM文件的应用与优化技巧
  • 2026年评价高的园区保洁服务/小区保洁服务品牌公司推荐 - 品牌宣传支持者
  • Launchpad:现代Web应用统一启动器的设计与实践
  • 【ElevenLabs纪录片旁白语音实战指南】:20年音视频架构师亲授5大黄金参数调优法,97%用户忽略的声场沉浸阈值!
  • NetBeans集成AI编程助手:插件开发与LLM应用实践
  • 龙门架桁车厂家哪家靠谱?2026国内专业龙门架桁车厂家实力盘点与推荐:海骏自动化领衔 - 栗子测评
  • Trainers‘ Legend G:三步完成赛马娘游戏汉化,打造流畅中文体验
  • IntelliJ Idea 常用快捷键列表
  • 桌面操作员CLI技能集:从命令行小白到效率高手
  • 用Next.js与Tailwind CSS构建可编程简历:GitHub明星项目实战解析
  • 量子混合算法求解带容量约束的车辆路径问题
  • Python图像处理实战:用代码将图片转换为十字绣图案
  • 碗架沥水架定制工厂推荐:2026碗碟沥水架厂家实力深度解析 - 栗子测评
  • ARM RealView Developer Kit v2.2安装与配置指南
  • MT7628实战指南:构建开机自启的TCP串口网关(ser2net集成与配置)
  • Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  • TQVaultAE:彻底解决《泰坦之旅》仓库空间不足的终极方案
  • 粮食安全政策托底,农业ETF(562900.SH)交易活跃度升温
  • 2026年可定制化的企业餐饮外包服务/工厂餐饮外包服务/公司餐饮外包服务优质公司推荐 - 品牌宣传支持者
  • 2026年知名的工厂食堂餐饮外包服务/园区餐饮外包服务/公司餐饮外包服务/学校餐饮外包服务靠谱公司推荐 - 行业平台推荐
  • AIGC前沿实践:GPTimage2系列模型技术解析与高效集成指南
  • AI辅助游戏开发:Claude-Code-Game-Studios项目实战解析
  • 惠普CP1025打印一半就空白?别急着换硒鼓,可能是这个几毛钱小零件在‘偷懒’
  • LLM Wiki 完整文件目录详解:wiki/concepts:按 主题聚合 多个源摘要的信息
  • AI智能体架构解析:从LLM工具调用到自动化工作流实战
  • 别再死磕正点原子代码了!用STM32CubeMX HAL库5分钟搞定8080并口LCD驱动(附FSMC避坑指南)
  • ComfyUI与ChatGPT API集成:自然语言驱动AI绘画工作流实践
  • 宝鸡离婚咨询哪家好?2026宝鸡律师咨事务所推荐:华格领衔,专业资深宝鸡离婚咨询律所精选 - 栗子测评
  • 动力母线生产厂家哪家好?2026年铝基动力母线厂家/铝动力母线厂家推荐:双嘉领衔 - 栗子测评