# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSameTree0(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
if p is None and q is None:
return True
if p is None or q is None:
return False
if p.val !=q.val:
return False
return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
if p is None and q is None:
return True
if p is None or q is None:
return False
if p.val !=q.val:
return False
# stack
s1=[]
s2=[]
s1.append(p)
s2.append(q)
while s1 and s2 :
temp1 = s1.pop()
temp2 =s2.pop()
if temp1 is None and temp2 is None:
continue
if temp1 is None or temp2 is None:
return False
if temp1.val !=temp2.val:
return False
s1.append(temp1.right)
s1.append(temp1.left)
s2.append(temp2.right)
s2.append(temp2.left)
return not s1 and not s2