leetcode100.相同的树
发布人:shili8
发布时间:2025-01-31 17:59
阅读次数:0
**相同的树**
给定两个根结点为 `null` 的二叉树,判断它们是不是相同的。
**示例1:**
输入:`root1 = [3,9,20,null,null,15,7], root2 = [3,9,20,null,null,15,7]`
输出:`true`
**示例2:**
输入:`root1 = [3,5,1,6,0,9,2,null,1], root2 = [3,5,1,6,0,9,2,null,1]`
输出:`true`
**示例3:**
输入:`root1 = [3,5,1,6,0,9,2,null,1], root2 = [3,5,1,6,0,9,2,null,4]`
输出:`false`
**解决方案**
我们可以使用递归的方式来判断两个树是否相同。具体来说,我们可以定义一个函数 `isSameTree(root1, root2)`,这个函数会比较两个树的每个结点,并返回一个布尔值表示它们是否相同。
# Definition for a binary tree node. class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonedef isSameTree(root1, root2): """ 判断两个树是否相同 Args: root1 (TreeNode): 第一个树的根结点 root2 (TreeNode): 第二个树的根结点 Returns: bool:两个树是否相同 """ # 如果两个树都为空,则它们是相同的 if not root1 and not root2: return True # 如果一个树为空,而另一个树不为空,则它们是不相同的 if not root1 or not root2: return False # 如果两个树的值不同,则它们是不相同的 if root1.val != root2.val: return False # 递归比较左子树和右子树 return isSameTree(root1.left, root2.left) and isSameTree(root1.right, root2.right)
**测试**
我们可以使用以下代码来测试这个函数:
# 创建两个相同的树root1 = TreeNode(3) root1.left = TreeNode(9) root1.right = TreeNode(20) root1.right.left = TreeNode(15) root1.right.right = TreeNode(7) root2 = TreeNode(3) root2.left = TreeNode(9) root2.right = TreeNode(20) root2.right.left = TreeNode(15) root2.right.right = TreeNode(7) # 测试函数print(isSameTree(root1, root2)) # 输出:true# 创建两个不同的树root1 = TreeNode(3) root1.left = TreeNode(5) root1.right = TreeNode(1) root1.right.left = TreeNode(6) root1.right.right = TreeNode(0) root1.right.right.right = TreeNode(9) root1.right.right.right.right = TreeNode(2) root2 = TreeNode(3) root2.left = TreeNode(5) root2.right = TreeNode(1) root2.right.left = TreeNode(6) root2.right.right = TreeNode(4) # 测试函数print(isSameTree(root1, root2)) # 输出:false
**总结**
这个解决方案使用递归的方式来判断两个树是否相同。它首先检查两个树是否都为空,如果是,则它们是相同的。如果一个树为空,而另一个树不为空,则它们是不相同的。如果两个树的值不同,则它们也是不相同的。最后,它递归比较左子树和右子树,以确定整个树是否相同。