【LeetCode】100. 相同的树


解题思路: 

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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onlywishes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值