当前位置:网站首页>二叉树的合并[C]
二叉树的合并[C]
2022-08-03 05:10:00 【北北的巷栀酒】
给定两个根结点root1和root2,二叉树的合并目的是将两个树合成一个数,合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。(题目来源于leetcode)
例子如下图:

输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]
树的结点定义如下:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
很明显,合并可以通过递归来实现,C语言代码如下:
struct TreeNode* mergeTrees(struct TreeNode* root1, struct TreeNode* root2){
if(root1 == NULL) return root2; //树一定要先判断是否为空,这里为空的同时也是返回的条件
if(root2 == NULL) return root1;
struct TreeNode* res = malloc(sizeof(struct TreeNode)); //创建结点,一定要申请空间
res->val = root1->val + root2->val;
res->left = mergeTrees(root1->left, root2->left); //左结点递归即可
res->right = mergeTrees(root1->right, root2->right);
return res; //返回创建的新树的根结点
}让我们来分析一下时间复杂度和空间复杂度,不妨令两棵原树的结点数是a和b,则很明显,时间复杂度是O(min(a,b)),空间复杂度取决于递归的栈深度,也是O(min(a,b)),这是因为递归的层数不会超过结点少的那棵树的结点树,当那棵树为一条链时会有最坏情况。
边栏推荐
猜你喜欢

Talking about GIS Data (6) - Projected Coordinate System

Newifi路由器第三方固件玩机教程,这个路由比你想的更强大以及智能_Newifi y1刷机_smzdm

ModelArts第二次培训

web安全-命令执行漏洞

13.< tag-动态规划和回文字串>lt.647. 回文子串 + lt.516.最长回文子序列

Fluorescent marker peptides FITC/AMC/FAM/Rhodamine TAMRA/Cy3 / Cy5 / Cy7 - Peptide

typescript49-交叉类型

typescript39-class类的可见修饰符

Install PostgreSQL on Windows

web安全-SSTI模板注入漏洞
随机推荐
数据分析 第一篇
web安全-sql注入漏洞
Build your own web page on the Raspberry Pi (2)
2. 两数相加
typescript43-类型兼容性说明
Gradle的安装配置
Modified BiotinDIAZO-Biotin-PEG3-DBCO|diazo-biotin-tripolyethylene glycol-diphenylcyclooctyne
C-PHY速率
Pr第二次培训笔记
判断回文数
ss-2.子项目互相访问(order80 -> payment8001)
IO流及其操作
[Harmony OS] [ARK UI] ETS context basic operations
HarmonyOS应用开发第一次培训
Fluorescent marker peptides FITC/AMC/FAM/Rhodamine TAMRA/Cy3 / Cy5 / Cy7 - Peptide
集合框架知识
Install PostgreSQL on Windows
Pr第四次培训笔记
Flask的简单介绍及使用方法简介
-元素之和-