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功能正常
图片说明
图片说明
图片说明

去掉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)