【Leetcode】100.SameTree 解题报告

【Leetcode】100.SameTree 解题报告_第1张图片
判断两棵树是否是完全相同的

方法1 递归法

每次递归的检查两个节点,如果相同,再递归的检查一对左子树和一对右子树


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

方法2 非递归法

将上面的方法改成非递归,递归方法中传入的参数即是每次要压入弹出栈的元素

class Solution(object):
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """
        if p == None or q== None:
            return p == q
        if p.val != q.val:
            return False
        else:
            stack = []
            stack.extend([p.left, q.left, p.right, q.right])
            while(len(stack)):
                r  = stack.pop()
                l  = stack.pop()
                if r == None or l == None:
                    if r != l:
                        return False
                else:
                    if r.val == l.val:
                        stack.extend([l.left, r.left, l.right, r.right])
                    else:
                        return False
            return True
        

你可能感兴趣的:(LeetCode)