iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++合并二叉树的思路与示例代码
  • 158
分享到

C++合并二叉树的思路与示例代码

2024-04-02 19:04:59 158人浏览 安东尼
摘要

前言 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点

前言

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例 1:

思路

1.确定递归函数的参数和返回值:

首先那么要合入两个二叉树,那么参数至少是要传入两个二叉树的根节点,返回值就是合并之后二叉树的根节点。

代码如下:

Treenode* mergeTrees(TreeNode* t1, TreeNode* t2)

2.确定终止条件:

因为是传入了两个树,那么就有两个树遍历的节点t1 和 t2,如果t1 == NULL 了,两个树合并就应该是 t2 了啊(如果t2也为NULL也无所谓,合并之后就是NULL)。

反过来如果t2 == NULL,那么两个数合并就是t1(如果t1也为NULL也无所谓,合并之后就是NULL)。

代码如下:

if (t1 == NULL) return t2; // 如果t1为空,合并之后就应该是t2
if (t2 == NULL) return t1; // 如果t2为空,合并之后就应该是t1

3.确定单层递归的逻辑:

单层递归的逻辑就比较好些了,这里我们用重复利用一下t1这个树,t1就是合并之后树的根节点(就是修改了原来树的结构)。
那么单层递归中,就要把两棵树的元素加到一起。

t1->val += t2->val;

接下来t1 的左子树是:合并 t1左子树 t2左子树之后的左子树。

t1 的右子树:是 合并 t1右子树 t2右子树之后的右子树。

最终t1就是合并之后的根节点。



class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        // 判空
        if(root1==nullptr) return root2;
        if(root2==nullptr) return root1;

        // 修改了t1的数值和结构
        root1->val+=root2->val;
        root1->left=mergeTrees(root1->left,root2->left);
        root1->right=mergeTrees(root1->right,root2->right);
        
        return root1;
    }
};

附:新建一颗树

不破坏原有两颗树结构



class Solution {
public:
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        if(!t1&&!t2)
            return NULL;
        TreeNode* node=new TreeNode(0);
        node->val=(t1? t1->val:0)+(t2? t2->val:0);
        node->left=mergeTrees((t1? t1->left: NULL),(t2? t2->left:NULL));
        node->right=mergeTrees((t1? t1->right: NULL),(t2? t2->right : NULL));
        return node;
    }
};

总结

到此这篇关于c++合并二叉树的文章就介绍到这了,更多相关C++合并二叉树内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++合并二叉树的思路与示例代码

本文链接: https://www.lsjlt.com/news/131979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++合并二叉树的思路与示例代码
    前言 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点...
    99+
    2022-11-12
  • Python实现二叉排序树与平衡二叉树的示例代码
    目录前言1. 二叉排序树1.1 构建一棵二叉排序树1.2 二叉排序树的数据结构1.3 实现二叉排序树类中的方法:2. 平衡二叉排序树2.1 二叉平衡排序树的数据结构3. 总结前言 什...
    99+
    2022-11-10
  • C++实现二叉树及堆的示例代码
    1 树 树是一种非线性数据结构,它是由n个有限结点组成的具有层次关系的集合。把它叫树是因为它是根朝上,叶子朝下的 来上图瞧瞧 1.1 树的相关名词 2 二叉树 2.1 二叉树的...
    99+
    2022-11-12
  • C++二叉树的直径与合并详解
    目录二叉树的直径思路合并二叉树思路1.确定递归函数的参数和返回值: 2.确定终止条件: 3.确定单层递归的逻辑: 总结二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。...
    99+
    2022-11-12
  • Java实现二叉树的示例代码(递归&迭代)
    目录1.二叉树基本概念见上节:详解Java中二叉树的基础概念(递归&迭代) 2.本次展示链式存储 以此图为例,完整代码如下: //基础二叉树实现 //使用左右孩子表示法 ...
    99+
    2022-11-13
  • java栈实现二叉树的非递归遍历的示例代码
    一般来说遍历二叉树用到递归,但是用Stack进行遍历也是一个不错的方法。 二叉树设置 class Node{ public int val; public Node left...
    99+
    2022-11-11
  • 二维码与Java并发编程结合的新思路。
    二维码与Java并发编程结合的新思路 随着二维码的普及,越来越多的企业和个人开始使用二维码来展示产品信息、活动信息、联系方式等等。然而,二维码的生成和解析需要大量的计算和处理,而这些过程通常需要较长的时间。为了优化这个过程,我们可以考虑将二...
    99+
    2023-10-23
    numy 二维码 并发
  • C#实现PDF页面合并的示例代码
    目录程序环境代码示例1.从两个PDF文档页面实现页面合并2.在同一个PDF文档实现页面合并本文以C#及vb.net代码为例介绍如何来实现合并PDF页面内容。本文中的合并并非将两个文档...
    99+
    2022-11-13
  • Vue实现递归组件的思路与示例代码
    目录前言一、递归组件是什么?二、Vue实现递归的核心思路三、代码示例1.父级2.子级3、实现效果补充:递归组件的应用场景总结前言 在我们开发过程中,为了提高开发效率,降低开发难度,我...
    99+
    2022-11-13
  • Pandas实现批量拆分与合并Excel的示例代码
    目录前言一、拆分成小表格二、合并excel1.介绍2.代码前言 提示:这里可以添加本文要记录的大概内容: 将一个EXCEL等份拆成多个EXCEL 将多个小EXCEL合并成一个大EXC...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作