Berumottox 2019-01-15 20:02 采纳率: 54.5%
浏览 556
已结题

leetcode 965 python3解法求助(self的用法有问题)

题目目的:给定二叉树判断树中所有节点的值是不是唯一的,是:True
有一个不一样,返回False

class Solution:
    def isUnivalTree(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        self.root = root
        judgeVal = self.root.val
        flag = True

                # 分别判断左右儿子
        if None != self.root.left:  
            if judgeVal != self.root.left.val:
                return False
            else:
                flag = True

        if None != self.root.right:  
            if judgeVal != self.root.right.val:
                return False
            else:
                flag = True

                # 遍历左子树
        if None != self.root.left:
            flag = self.isUnivalTree(self.root.left)

        if not flag:
            return False

                # 遍历右子树
        if None != self.root.right:
            flag = self.isUnivalTree(self.root.right)
        return flag

用例:[3,3,3,null,null,2,3]
预期返回值:False
实际:True

问题:root前加self会导致从根节点遍历右子树时报错,原因是在这个分支中self.root被self.root.left给覆盖掉了,根节点的左子树是个叶子结点,其右节点自然为None. 这是为什么?去掉self功能正常
图片说明
图片说明
图片说明

  • 写回答

1条回答 默认 最新

  • 清源君 2019-01-15 22:29
    关注

    去掉slef,root虽然还是局部变量但是因为递归的原因具体的值会发生变化

    if not root: return True
            if root.left:  
                if root.val != root.left.val:
                    return False
            if root.right:  
                if root.val != root.right.val:
                    return  False
    
            return self.isUnivalTree(root.left) and self.isUnivalTree(root.right)
    

    几点建议:
    1. 你的if 判断不要这样写
    2. pycharm设置一下断点实际分析下每次调用函数的变化
    3. 最重要的是,理清楚逻辑,这里面遍历节点你的逻辑判断很是复杂(如果别人看你的code,一下子应该很难帮你debug)

    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀