首页 >> 中医火疗

所需合并两个二叉树了

发布时间: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

手术后营养食谱
拉肚子的症状有哪些
治疗干眼症的眼药水有哪些
先诺欣
皮肤发黄是什么原因
餐后血糖正常值
慢性支气管炎咳嗽吃什么药
夏季咳嗽吃什么止咳化痰效果好

上一篇: 41岁凭借《武林外传》成名,娶大6岁二婚女CEO,相守23年零绯闻

下一篇: 苏州致17死四季Linux酒店坍塌事故原因:无加固情况下拆除底层承重墙

友情链接