You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反转二叉树遇NoneType错误:非空判断仍报错原因咨询

二叉树反转代码中的NoneType错误分析

问题代码

#code taken from leetcode so treenode is predefined

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right

class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        temp=root
        def dfs(node):
            if node:
                left_temp=node.left
                node.left=node.right
                node.right=left_temp
            if node.left:           #Keeping a check only if left node is not None then proceed
                dfs(node.left)
            if node.right:          #Keeping a check only if right node is not None then proceed
                dfs(node.right)
        dfs(temp)
        return root

问题描述

  • 报错信息:访问node.left时出现错误:NoneType对象没有left属性。
  • 疑惑:按照Python规则,None是假值,node.left为None时应该不会执行后续逻辑,想了解当前写法为何出错,问题出在哪里。

错误原因分析

问题核心是当node本身为None时,你直接访问了它的left属性。

看代码逻辑:
当dfs函数传入的node是None时,第一个if node条件不成立,会直接执行后面的if node.left判断。此时node是None,尝试访问node.left必然触发NoneType没有属性的错误——你混淆了“node.left为None”和“node本身是None”两种情况:

  • 前者是node存在,只是它的左子节点为空,这时候if node.left会判断为假,不会执行后续逻辑;
  • 后者是node本身就是空对象,根本没有left属性,直接访问就会报错。

把if node.left和if node.right放到if node的代码块内后,只有node存在时才会去判断它的子节点,自然就避免了node为None时访问属性的错误。

内容的提问来源于stack exchange,提问作者User_04_04_2023

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:22:43