📜  检查两棵树是否相同的迭代函数(1)

📅  最后修改于: 2023-12-03 15:10:51.726000             🧑  作者: Mango

检查两棵树是否相同的迭代函数

在树结构中,两棵树相同的条件就是他们的结构相同,并且每个节点上的值也相同。我们可以使用递归来判断两棵树是否相同,但是在本篇文章中,我们将介绍一种迭代的方法来检查两棵树是否相同。

算法

我们可以使用 深度优先搜索(DFS) 迭代来检查两棵树是否相同。具体步骤如下:

  1. 首先将两棵树的根节点分别入栈。
  2. 当栈不为空时,取出栈顶的节点并比较他们的值是否相同,如果不同则返回 False,否则继续以下步骤。
  3. 将两个节点的左子节点分别入栈,再将右子节点分别入栈。

最后,如果栈为空,说明两棵树的结构和节点的值都相同,返回 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

总结

在本篇文章中,我们介绍了一种使用深度优先搜索来检查两棵树是否相同的算法。这种算法不需要使用递归,实现起来比较简单。总之,掌握多种方法来解决同一个问题,可以让我们更加灵活地编写代码。