0
点赞
收藏
分享

微信扫一扫

【LeetCode】100. 相同的树

肉肉七七 2022-02-15 阅读 67


解题思路: 

树的结构和值都相同,才正确。

1)根据二叉树有左部分和右部分,所以递归对左部分每个对应结点值比较,右部分每个对应节点值比较,都相等就正确

        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
举报

相关推荐

0 条评论