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

二叉树LCA代码报错:AttributeError: 'list'对象无'left'属性

问题原因

你调用lowestCommonAncestor时犯了两个关键错误:

  1. 第一个参数传了列表,但方法要求的是TreeNode类型的根节点,列表没有left/right属性,直接触发AttributeError。
  2. 后面的p和q传的是数值(5、1),但方法里是比较TreeNode对象是否相等,不是比较节点值,即使树构建正确,这样传参也找不到目标节点。
解决步骤

1. 实现列表转二叉树的辅助函数

用广度优先遍历(BFS)把输入的列表转换成TreeNode结构,处理None代表空节点的情况:

def list_to_tree(arr):
    if not arr:
        return None
    root = TreeNode(arr[0])
    queue = [root]
    idx = 1
    while queue and idx < len(arr):
        node = queue.pop(0)
        # 处理左子节点
        if arr[idx] is not None:
            node.left = TreeNode(arr[idx])
            queue.append(node.left)
        idx += 1
        if idx >= len(arr):
            break
        # 处理右子节点
        if arr[idx] is not None:
            node.right = TreeNode(arr[idx])
            queue.append(node.right)
        idx += 1
    return root

2. 找到目标节点的辅助函数

因为方法需要传入TreeNode对象,所以要从构建好的树中找到对应值的节点:

def find_node(root, val):
    if not root:
        return None
    if root.val == val:
        return root
    left = find_node(root.left, val)
    if left:
        return left
    return find_node(root.right, val)

3. 正确调用LCA方法

把列表转成树,找到目标节点后再调用:

# 原TreeNode和Solution类保留不变
class TreeNode:
    def __init__ (self, x):
        self.val = x
        self.right = None
        self.left = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if not root:
            return None
        elif root == p or root == q:
            return root
    
        l = self.lowestCommonAncestor(root.left, p, q)
        r = self.lowestCommonAncestor(root.right, p, q)
    
        if l and r:
            return root
        else:
            return l or r

# 正确调用流程
s = Solution()
# 1. 列表转二叉树
tree_root = list_to_tree([3,5,1,6,2,0,8,None,None,7,4])
# 2. 找到目标节点
p_node = find_node(tree_root, 5)
q_node = find_node(tree_root, 1)
# 3. 调用LCA方法
result = s.lowestCommonAncestor(tree_root, p_node, q_node)
print(result.val)  # 输出3,符合预期
验证说明

运行上述代码后,会正确输出3,也就是节点5和1的最近公共祖先,解决了原有的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:15:35