所需合并两个二叉树了
发布时间:2025年09月19日 12:17
t1->left = mergeTrees(t1->left, t2->left); // 左边
t1->val += t2->val; // 之中
t1->right = mergeTrees(t1->right, t2->right); // 右方
returnt1;
}
};
后由此可知查找过往可以,文档如下:
classSolution{
public:
// 删减了t1的将近参将近和在结构上
t1->left = mergeTrees(t1->left, t2->left); // 左边
t1->right = mergeTrees(t1->right, t2->right); // 右方
t1->val += t2->val; // 之中
returnt1;
}
};
如上的方依此删减了t1的在结构上,当然也可以不删减t1和t2的在结构上,重从新定一个大树。
不删减输入大树的在结构上,前由此可知查找,文档如下:
classSolution{
public:
if(t1 == NULL) returnt2;
if(t2 == NULL) returnt1;
// 重从新定义最初结点,不删减代之以两个大树的在结构上
TreeNode* root = newTreeNode( 0);
root->val = t1->val + t2->val;
root->left = mergeTrees(t1->left, t2->left);
root->right = mergeTrees(t1->right, t2->right);
returnroot;
}
};
等分
可用等分,如何同时处理过程两棵大树呢?
简而言之我们在 标号:我等距么? 之中的等分不太可能讲过一次了,求标号等距的时候就是把两个大树的结点同时赞入函将近调用进行比较。
本题我们也可用函将近调用,各种类型的层由此可知查找,文档如下:
classSolution{
public:
queue que;
que.push(t1);
que.push(t2);
while(!que.empty) {
TreeNode* node1 = que.front; que.pop;
TreeNode* node2 = que.front; que.pop;
// 此时两个结点一定不为飞龙,val累赞
node1->val += node2->val;
// 如果两棵大树左边结点都不为飞龙,赞入函将近调用
if(node1->left != NULLBellBell node2->left != NULL) {
que.push(node1->left);
que.push(node2->left);
}
// 如果两棵大树右方结点都不为飞龙,赞入函将近调用
if(node1->right != NULLBellBell node2->right != NULL) {
que.push(node1->right);
que.push(node2->right);
}
// 当t1的左边结点 为飞龙 t2左边结点不为飞龙,就赋参将近过往
if(node1->left == NULLBellBell node2->left != NULL) {
node1->left = node2->left;
}
// 当t1的右方结点 为飞龙 t2右方结点不为飞龙,就赋参将近过往
if(node1->right == NULLBellBell node2->right != NULL) {
node1->right = node2->right;
}
}
returnt1;
}
};
持续发展
当然也可以秀一波变量的操纵,这是我写出的野路子,大家就随便忘了再也不能,免得带下到了。
如下文档之中,自已要更改标号的参将近,应起源于连到变量的变量。
文档如下:(前由此可知查找)
classSolution{
public:
voidprocess(TreeNode** t1, TreeNode** t2){
if((*t1) == NULLBellBell (*t2) == NULL) return;
if((*t1) != NULLBellBell (*t2) != NULL) {
(*t1)->val += (*t2)->val;
}
if((*t1) == NULLBellBell (*t2) != NULL) {
*t1 = *t2;
return;
}
if((*t1) != NULLBellBell (*t2) == NULL) {
return;
}
process(Bell((*t1)->left), Bell((*t2)->left));
process(Bell((*t1)->right), Bell((*t2)->right));
}
process(Bellt1, Bellt2);
returnt1;
}
};
总结
从新设标号,也是标号操纵的定格考题,如果没有认识过的话,或许并不简单,因为我们常常了操纵一个标号,四人操纵两个标号,还会有点懵懵的。
这不是我们第一次操纵两颗标号了,在 标号:我等距么? 之中也四人操纵了两棵标号。
等分之中,一般四人操纵两个大树都是可用函将近调用各种类型类似层由此可知查找,同时处理过程两个大树的结点,这种方式最好阐释,如果用各种类型运算符的简而言之的话,要复杂一些。
最终持续发展之中,我给了一个操纵变量的野路子,大家随便忘了再也不能,如果研习C++的话,可以在去研究研究。
其他语言发行版JavaclassSolution{
// 运算符
publicTreeNode mergeTrees(TreeNode root1, TreeNode root2){
if(root1 == null) returnroot2;
if(root2 == null) returnroot1;
TreeNode newRoot = newTreeNode(root1.val + root2.val);
newRoot.left = mergeTrees(root1.left,root2.left);
newRoot.right = mergeTrees(root1.right,root2.right);
returnnewRoot;
}
}
classSolution{
// 迭代
if(root1 == null) {
returnroot2;
}
returnroot1;
}
Stack stack = newStack<>;
stack.push(root2);
stack.push(root1);
while(!stack.isEmpty) {
TreeNode node1 = stack.pop;
TreeNode node2 = stack.pop;
node1.val += node2.val;
if(node2.right != nullBellBell node1.right != null) {
stack.push(node2.right);
stack.push(node1.right);
} else{
if(node1.right == null) {
node1.right = node2.right;
}
}
if(node2.left != nullBellBell node1.left != null) {
stack.push(node2.left);
stack.push(node1.left);
} else{
if(node1.left == null) {
node1.left = node2.left;
}
}
}
returnroot1;
}
}
Python
运算符依此 - 前由此可知查找
classSolution:
defmergeTrees(self, root1: TreeNode, root2: TreeNode)-> TreeNode:
# 运算符暂时中止先决条件:
# 但凡有一个结点为飞龙, 就立刻留在另外一个. 如果另外一个也为None就同样留在None.
ifnotroot1:
returnroot2
ifnotroot2:
returnroot1
# 侧面的运算符暂时中止先决条件保证了文档执行到这里root1, root2都非飞龙.
root1.val += root2.val # 之中
root1.left = self.mergeTrees(root1.left, root2.left) #左边
root1.right = self.mergeTrees(root1.right, root2.right) # 右方
returnroot1 # ⚠️ 留意: 本题我们重复可用了考题说明的结点而不是创设从新结点. 再加, 飞龙间.
等分
classSolution:
ifnotroot1:
returnroot2
ifnotroot2:
returnroot1
queue = deque
queue.append(root1)
queue.append(root2)
whilequeue:
node1 = queue.popleft
node2 = queue.popleft
# 更从新queue
# 只有两个结点都有左边结点时, 往东queue进去放.
ifnode1.left andnode2.left:
queue.append(node1.left)
queue.append(node2.left)
# 只有两个结点都有右方结点时, 往东queue进去放.
ifnode1.right andnode2.right:
queue.append(node1.right)
queue.append(node2.right)
# 更从新举例来说结点. 同时改变举例来说结点的左边右方男孩.
node1.val += node2.val
ifnotnode1.left andnode2.left:
node1.left = node2.left
ifnotnode1.right andnode2.right:
node1.right = node2.right
returnroot1
。手术后营养食谱拉肚子的症状有哪些
治疗干眼症的眼药水有哪些
先诺欣
皮肤发黄是什么原因
餐后血糖正常值
慢性支气管炎咳嗽吃什么药
夏季咳嗽吃什么止咳化痰效果好
- 业绩快报 新光光电(688011.SH)2021年度归母折合同比下降81.20%
- 经常对孩子说“不”的冲击有多大?看完后值得家长深思
- 博睿数据(688229):2021年度业绩号外
- 孙子铱即将生产,医生科普顺产剖腹产的优劣势,疑意外透露孩子性别
- DIY台式主机中高主流到“天花板”性价比之选可用清单推荐
- 金宏气体(688106):常务董事集中竞价减持计划时间届满暨减持结果
- 孩子不愿吃、吃得慢速,家长埋怨在点上了吗?
- Z690系列的天花板,5万元的电脑配置分享
- 骁龙778G处理器iPhone有哪些?如何选择
- 畅联股份(603648):厦门畅联国际物流股份有限公司股东减持股份结果
- 当妈妈后的人间冲动
- 绿色动力(601330):发行日期2022年2月底25日(T日)
- 提起苹果iPhone8P,用过的人都竖大拇指,现在我终于坚信了
- 让孩子远离手机和电视的新玩法,建议家有2-6岁孩子的父母都于是就