📅  最后修改于: 2023-12-03 15:10:51.726000             🧑  作者: Mango
在树结构中,两棵树相同的条件就是他们的结构相同,并且每个节点上的值也相同。我们可以使用递归来判断两棵树是否相同,但是在本篇文章中,我们将介绍一种迭代的方法来检查两棵树是否相同。
我们可以使用 深度优先搜索(DFS) 迭代来检查两棵树是否相同。具体步骤如下:
False
,否则继续以下步骤。最后,如果栈为空,说明两棵树的结构和节点的值都相同,返回 True
。
Python 代码实现如下:
def is_same_tree(p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
if not p or not q or p.val != q.val:
return False
stack = [(p, q)]
while stack:
node_p, node_q = stack.pop()
if not node_p and not node_q:
continue
if not node_p or not node_q or node_p.val != node_q.val:
return False
stack.append((node_p.left, node_q.left))
stack.append((node_p.right, node_q.right))
return True
在上述代码中,我们定义了一个 is_same_tree
函数来检测两棵树是否相同。首先如果两个节点都是 None
,说明两棵树到达了最底层,返回 True
。如果其中一个节点为 None
,或者两个节点的值不相同,那么说明两棵树不相同,返回 False
。
接着,我们将两棵树的根节点分别入栈。当栈不为空时,取出栈顶的节点并比较他们的值是否相同。如果不同,则说明两棵树不相同,返回 False
。否则,将两个节点的左右子节点分别入栈。
最终,如果栈为空,说明两棵树的结构和节点的值都相同,返回 True
。
在本篇文章中,我们介绍了一种使用深度优先搜索来检查两棵树是否相同的算法。这种算法不需要使用递归,实现起来比较简单。总之,掌握多种方法来解决同一个问题,可以让我们更加灵活地编写代码。