怎么做盗号网站手机开发一个小程序游戏要多少钱
news/
2025/9/27 1:35:51/
文章来源:
怎么做盗号网站手机,开发一个小程序游戏要多少钱,传奇网址,品牌营销和品牌推广的区别617.合并二叉树#xff08;经典#xff09;
合并二叉树是操作两棵树的题目里面很经典的#xff0c;如何对两棵树遍历以及处理#xff1f; 给定两个二叉树#xff0c;想象当你将它们中的一个覆盖到另一个上时#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并…617.合并二叉树经典
合并二叉树是操作两棵树的题目里面很经典的如何对两棵树遍历以及处理 给定两个二叉树想象当你将它们中的一个覆盖到另一个上时两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠那么将他们的值相加作为节点合并后的新值否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 注意: 合并必须从两个树的根节点开始。
思路
参考https://programmercarl.com/0617.%E5%90%88%E5%B9%B6%E4%BA%8C%E5%8F%89%E6%A0%91.html 如何同时遍历两个二叉树呢 其实和遍历一个树逻辑是一样的只不过传入两个树的节点同时操作。
递归
二叉树使用递归就要想使用前中后哪种遍历方式 本题使用哪种遍历都是可以的 我们下面以前序遍历为例。
确定递归函数的参数和返回值
首先要合入两个二叉树那么参数至少是要传入两个二叉树的根节点返回值就是合并之后二叉树的根节点。
因为是传入了两个树那么就有两个树遍历的节点t1 和 t2如果t1 NULL 了两个树合并就应该是 t2 了如果t2也为NULL也无所谓合并之后就是NULL。
反过来如果t2 NULL那么两个数合并就是t1如果t1也为NULL也无所谓合并之后就是NULL。
确定单层递归的逻辑
单层递归的逻辑就比较好写了这里我们重复利用一下t1这个树t1就是合并之后树的根节点就是修改了原来树的结构。 那么单层递归中就要把两棵树的元素加到一起。 接下来t1 的左子树是合并 t1左子树 t2左子树之后的左子树。 t1 的右子树是 合并 t1右子树 t2右子树之后的右子树。 最终t1就是合并之后的根节点。 class TreeNode(object):def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right rightclass Solution(object):def mergeTrees(self, root1, root2): # 传入参数 就是两棵树 这里以根节点表示:type root1: TreeNode:type root2: TreeNode:rtype: TreeNode# 遍历两棵树 与遍历一棵树的逻辑是一样的 这里采用前序遍历的方式if not root1:return root2if not root2:return root1# 中 中的处理逻辑就是节点的值相加root1.val root2.val # 根节点更新(以root1表示更新之后的树)# 左root1.left self.mergeTrees(root1.left, root2.left)# 右root1.right self.mergeTrees(root1.right, root2.right)return root1# 当然 也可以新建节点 比如 root
迭代法
# 法二 迭代法 需要模拟队列来存储两棵树上的节点 这样就是层序遍历
from collections import deque
class Solution(object):def mergeTrees(self, root1, root2):if not root1:return root2if not root2:return root1queue deque()queue.append(root1)queue.append(root2)while queue: # 以root1为更新之后的树# 弹出节点node1 queue.popleft()node2 queue.popleft()# 左if node1.left and node2.left: # 两边左节点都存在queue.append(node1.left)queue.append(node2.left)# 右if node1.right and node2.right: # 两边右节点都存在queue.append(node1.right)queue.append(node2.right)# 更新当前节点. 同时改变当前节点的左右孩子. node1.val node2.valif not node1.left and node2.left: # node1无左节点 那就用node2的 node2没用也没事 就是Nullnode1.left node2.leftif not node1.right and node2.right:node1.right node2.rightreturn root1
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916780.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!