100. Same Tree

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

当没有二叉树对象的时候报错,需要修改

递归
最后一轮判断分为三种情况

  1. 两个元素都还在
  2. 两个元素都不在了,此时为True(能运行到最后一轮,说明之前都是True)
  3. 有一个元素不存在了,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)
posted @ 2016-09-27 21:12  Salmd  阅读(115)  评论(0)    收藏  举报