problem
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value
solution
def isSameTree(self, p, q):
if p.val == q.val:
return True and self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
else:
return False
当没有二叉树对象的时候报错,需要修改
递归
最后一轮判断分为三种情况
- 两个元素都还在
- 两个元素都不在了,此时为True(能运行到最后一轮,说明之前都是True)
- 有一个元素不存在了,False
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isSameTree(self, p, q):
"""
:type p: TreeNode
:type q: TreeNode
:rtype: bool
"""
if p and q :
if p.val == q.val:
return True and self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
else:
return False
elif p == None and q == None :
return True
else:
return False
discuss
一个精简写法
def isSameTree(self, p, q):
if p and q:
return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
return p is q
另外一种思路,感觉不是很好
把二叉树摊平成tuple,比较
def isSameTree(self, p, q):
def t(n):
return n and (n.val, t(n.left), t(n.right))
return t(p) == t(q)