[LeetCode]100. Same Tree

100. Same Tree

DFS

递归

class Solution(object):
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """
        if not p and not q:
            return True
        elif p and q:
            return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
        else:
            return False

迭代

class Solution(object):
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """
        if not p and not q:
            return True
        elif not p or not q:
            return False
        stack = [(p, q)]
        while stack:
            node = stack.pop()
            if node[0].val == node[1].val:
                if node[0].left and node[1].left:
                    stack.append((node[0].left, node[1].left))
                elif (not node[0].left and node[1].left) or (node[0].left and not node[1].left):
                    return False
                if node[0].right and node[1].right:
                    stack.append((node[0].right, node[1].right))
                elif (not node[0].right and node[1].right) or (node[0].right and not node[1].right):
                    return False
            else:
                return False
        return True

上面只要将pop()改成pop(0),就变成BFS了。

posted @ 2017-08-30 12:38  banananana  阅读(133)  评论(0编辑  收藏  举报