LeetCode子树平均值节点数Python代码报错AttributeError的解决方法
问题解决:AttributeError: 'list' object has no attribute 'left'
错误原因
你在本地运行时直接将列表root = [4,8,5,0,1,None,6]传入averageOfSubtree方法,但该方法要求传入的是TreeNode类的实例对象,而非列表。LeetCode平台会自动将题目给出的列表格式二叉树转换为TreeNode结构,但本地运行需要你手动实现这个转换逻辑。
修改后的完整代码
from typing import Optional, List from collections import deque # Definition for a binary tree node. (This is given by leetcode) class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution(object): def averageOfSubtree(self, root: Optional[TreeNode]) -> int: ans = 0 def traverse(node): if node is None: return (0,0) left = traverse(node.left) right = traverse(node.right) total = left[0] + right[0] + node.val count = left[1] + right[1] + 1 if total // count == node.val: nonlocal ans ans += 1 return (total, count) traverse(root) return ans # 新增辅助函数:将列表转换为TreeNode结构的二叉树 def list_to_tree(arr: List[Optional[int]]) -> Optional[TreeNode]: if not arr: return None root = TreeNode(arr[0]) queue = deque([root]) index = 1 while queue and index < len(arr): node = queue.popleft() # 处理左子节点 if arr[index] is not None: node.left = TreeNode(arr[index]) queue.append(node.left) index += 1 # 处理右子节点 if index < len(arr) and arr[index] is not None: node.right = TreeNode(arr[index]) queue.append(node.right) index += 1 return root # 测试代码 root_list = [4,8,5,0,1,None,6] root = list_to_tree(root_list) a = Solution() print(a.averageOfSubtree(root))
关键修改点
- 新增
list_to_tree函数:利用队列实现广度优先遍历,将列表中的元素依次转换为TreeNode节点,并构建出完整的二叉树结构。 - 测试部分将原列表传入辅助函数,得到
TreeNode类型的根节点后,再调用averageOfSubtree方法。
内容的提问来源于stack exchange,提问作者Cassie
相关产品推荐
相关产品推荐

