TreeNode类is_left_child方法逻辑解析:为何需双重条件判断?
关于TreeNode.is_left_child方法的疑惑解答
首先要明确:直接写self.parent.left_child == self会触发报错!
如果当前节点是根节点(self.parent为None),访问self.parent.left_child会直接抛出AttributeError——因为None对象不存在left_child属性。所以必须先判断self.parent不为空,才能安全访问它的子节点属性。
至于你提到的替代显式if写法,这只是附带的语法简化。核心原因是避免空对象的属性访问错误:
- 当
self.parent为None时,self.parent and ...会直接返回False,不会执行后续判断,完美规避报错 - 若去掉前面的判断,根节点调用该方法会直接崩溃
举个实际例子:
root = TreeNode(10) root.is_left_child() # 若省略self.parent判断,会抛出AttributeError: 'NoneType' object has no attribute 'left_child'
原方法里的逻辑,本质是把两步判断合并成一行布尔表达式:
- 先确认当前节点存在父节点
- 再确认自己是父节点的左孩子
只有两个条件同时满足才返回True,否则返回False,全程不会触发错误。
内容的提问来源于stack exchange,提问作者spacedustpi
相关产品推荐
相关产品推荐

