题目目的:给定二叉树判断树中所有节点的值是不是唯一的,是: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)