if not p and not q: #如果都为空,也一样
return True
elif not p or not q: #如果一个为空FALSE
return False
elif p.val != q.val: #如果对应结点值不等F
return False
else :
return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
#对左右部分对应结点循环
2)既然要求结构相同,对两个数进行前序遍历,每个节点分别对应,值相等就True,
用一个栈存储两个树的节点,每次存储两个对应结点,确保结构一样,
由于前序遍历为根左右,先比较根节点,在比较左部分,左部分没了,比较右部分循环
stack = [] #存储节点数据
if not p and not q: #都为空TRUE
return True
elif not p or not q: #一个空FALSE
return False
while p or q or stack: #遍历的节点和栈不都为空时
while p or q:
if not p or not q: #当遍历的两个结点一为空
return False
if p.val != q.val: #两个对应结点存在但对应值不同F
return False
stack.append(p) #结点在值相同,加入栈后前序遍历下一个,
stack.append(q)
p = p.left
q = q.left
q = stack.pop() #到达最左后,遍历最后结点的右孩子循环
p = stack.pop()
p = p.right
q = q.right #当最后两个元素取出后栈空,并且这俩节点右孩子空,结束
return True
解题思路:树的结构和值都相同,才正确。1)根据二叉树有左部分和右部分,所以递归对左部分每个对应结点值比较,右部分每个对应节点值比较,都相等就正确 if not p and not q: #如果都为空,也一样 return True elif not p or not q: #如果一个为空FALSE return False elif p.val != q.va...