当前位置:网站首页>二叉树的合并[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)),这是因为递归的层数不会超过结点少的那棵树的结点树,当那棵树为一条链时会有最坏情况。
边栏推荐
- typescript45-接口之间的兼容性
- CAD有生僻字如何打出来、如何提交软件相关问题或建议?
- UV decomposition of biotin - PEG2 - azide | CAS: 1192802-98-4 biotin connectors
- 轨迹(形状)相似性判断与度量方法
- 传说中可“免费白拿”的无线路由器 - 斐讯 K2 最简单刷 breed 与第三方固件教程
- -最低分-
- -整数求和-
- Tag stack - stack monotonically preparatory knowledge - lt. 739. The daily temperature
- -飞机大战-
- odps的临时查询能在写sql的时候就给结果一个命名不?
猜你喜欢
随机推荐
1059 C语言竞赛 (20 分)(C语言)
ModelArts第二次培训
Common fluorescent dyes to modify a variety of groups and its excitation and emission wavelength data in the data
Gradle的安装配置
web安全-sql注入漏洞
Pr第二次培训笔记
-整数求和-
idea使用@Autowired注解爆红原因及解决方法
1.ROS环境搭建与基础工作
Fluorescent marker peptides FITC/AMC/FAM/Rhodamine TAMRA/Cy3 / Cy5 / Cy7 - Peptide
反射注解基础
ss-1.curl (cloud-provider-payment8001)
第四次培训
MySql数据库
信息编码、存储压缩与密码学
-查找数-
Djiango第三次培训
Kaggle 入门(Kaggle网站使用及项目复现)
VR全景展打造专属元宇宙观展空间
UV decomposition of biotin - PEG2 - azide | CAS: 1192802-98-4 biotin connectors