Problem
# Given two binary trees, write a function to check if they are the same or not.
#
# Two binary trees are considered the same if they are structurally identical
# and the nodes have the same value.
#
#
# Example 1:
#
# Input:
# 1 1
# / \ / \
# 2 3 2 3
#
# [1,2,3], [1,2,3]
#
# Output: true
# Example 2:
#
# Input:
# 1 1
# / \
# 2 2
#
# [1,2], [1,null,2]
#
# Output: false
# Example 3:
#
# Input:
# 1 1
# / \ / \
# 2 1 1 2
#
# [1,2,1], [1,1,2]
#
# Output: false
Idea
对两棵树的每个相同位置都进行比较。一旦某结点不一致,即返False。
判断顺序:
1. not node1 and not node2: continue
2. None in (node1, node2) 或 node1.val != node2.val: 返False
3. node1.val == node2.val: 继续判断左右子树
AC
栈:
# Time: O(n)
# Space: O(h)
class Solution():
def isSameTree(self, p, q):
stack = [(p, q)]
while stack:
node1, node2 = stack.pop()
if not node1 and not node2:
continue
if None in (node1, node2) or node1.val != node2.val:
return False
else:
stack.append((node1.left, node2.left))
stack.append((node1.right, node2.right))
return True
递归:
# Time: O(n)
# Space: O(h)
class Solution():
def isSameTree(self, p, q):
if not p and not q:
return True
if None in (p, q) or p.val != q.val:
return False
else:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)