📅  最后修改于: 2023-12-03 15:10:51.539000             🧑  作者: Mango
在二叉搜索树中,每个节点都比其左子树中的所有节点大,比其右子树中的所有节点小。因此,如果想要检查两个二叉搜索树是否相同,可以通过比较树中所有节点的值是否相同来实现。本文将介绍两种方法,分别为递归方法和迭代方法。
递归方法是一种简单易懂的方法。我们可以先比较根节点的值是否相同,然后递归比较左子树和右子树的值是否相同。如果两个二叉搜索树的根节点和所有子节点的值都相同,则它们相同。
以下是基于递归方法的Python代码:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
elif not p or not q:
return False
elif p.val != q.val:
return False
else:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
另一种方法是使用迭代方法。迭代方法使用队列来实现广度优先搜索。我们需要将根节点加入到队列中,然后逐个比较队列中的节点值是否相同。首先比较根节点的值,然后将左右子节点加入到队列中。之后再逐个比较队列中的节点值是否相同。如果两个二叉搜索树的根节点和所有子节点的值都相同,则它们相同。
以下是基于迭代方法的Python代码:
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
queue1 = deque()
queue2 = deque()
queue1.append(p)
queue2.append(q)
while queue1 and queue2:
node1 = queue1.popleft()
node2 = queue2.popleft()
if not node1 and not node2:
continue
elif not node1 or not node2:
return False
elif node1.val != node2.val:
return False
queue1.append(node1.left)
queue1.append(node1.right)
queue2.append(node2.left)
queue2.append(node2.right)
return True
以上就是检查两个二叉搜索树是否相同的方法。考虑到递归方法和迭代方法各有优点,建议在实际应用中根据具体情况选择方法。