Python 二叉树遍历 - 具有已定义 left/right 属性的节点对象不可访问
Python binary tree traversal - Node object with a defined left/right attribute is not accessible
我正在复习我的编码技能,几周前开始做 LeetCode 题。到目前为止一切顺利,除了这个错误,我似乎无法调试
问题:给定两棵二叉树p和q的根,写一个函数检查它们是否相同。
两棵二叉树如果结构相同,节点值相同,则认为是相同的
方法: 由于树的问题是二叉树,我选择使用二叉树遍历方法(按顺序)。如果我们可以遍历树并将其值存储在数组中,那么只要两棵树使用的遍历方法相同,那么两棵相等的二叉树将具有相同的数组。
我针对这个问题的代码如下,但我不确定为什么在我的 'in_order' 方法中尝试访问左子树时出现错误。第二个 'if' 条件给我一个错误:'Type int does not have attribute 'left''
这让我很困惑,因为当我调用我的方法时 'in_order':
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
self.in_order(p)
我正在传递一个 TreeNode 对象 (p),应该 有一个左属性(即使它是 None),why/how 是解释器将 'p' 树节点对象转换为 'int'?
我不是在寻找解决此问题的新方法,而是 why/how 出现此错误?
感谢您花时间阅读。
# 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 in_order(self, tree, result=None):
if result is None:
result = []
if tree.left:
result.append(tree.left.val)
self.in_order(tree.left.val, result)
result.append(tree.val)
if tree.right:
result.append(tree.right.val)
self.in_order(tree.right.val, result)
return result
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
self.in_order(p)
完整错误跟踪:
AttributeError: 'int' object has no attribute 'left'
if tree.left:
Line 11 in in_order (Solution.py)
self.in_order(tree.left.val, result)
Line 13 in in_order (Solution.py)
self.in_order(p)
Line 24 in isSameTree (Solution.py)
ret = Solution().isSameTree(param_1, param_2)
Line 52 in _driver (Solution.py)
_driver()
Line 63 in <module> (Solution.py)
self.in_order(tree.left.val, result)
这一行是问题,因为 tree.left.val
不是节点。在这种情况下它是一个 int 值。
我正在复习我的编码技能,几周前开始做 LeetCode 题。到目前为止一切顺利,除了这个错误,我似乎无法调试
问题:给定两棵二叉树p和q的根,写一个函数检查它们是否相同。 两棵二叉树如果结构相同,节点值相同,则认为是相同的
方法: 由于树的问题是二叉树,我选择使用二叉树遍历方法(按顺序)。如果我们可以遍历树并将其值存储在数组中,那么只要两棵树使用的遍历方法相同,那么两棵相等的二叉树将具有相同的数组。
我针对这个问题的代码如下,但我不确定为什么在我的 'in_order' 方法中尝试访问左子树时出现错误。第二个 'if' 条件给我一个错误:'Type int does not have attribute 'left''
这让我很困惑,因为当我调用我的方法时 'in_order':
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
self.in_order(p)
我正在传递一个 TreeNode 对象 (p),应该 有一个左属性(即使它是 None),why/how 是解释器将 'p' 树节点对象转换为 'int'?
我不是在寻找解决此问题的新方法,而是 why/how 出现此错误?
感谢您花时间阅读。
# 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 in_order(self, tree, result=None):
if result is None:
result = []
if tree.left:
result.append(tree.left.val)
self.in_order(tree.left.val, result)
result.append(tree.val)
if tree.right:
result.append(tree.right.val)
self.in_order(tree.right.val, result)
return result
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
self.in_order(p)
完整错误跟踪:
AttributeError: 'int' object has no attribute 'left'
if tree.left:
Line 11 in in_order (Solution.py)
self.in_order(tree.left.val, result)
Line 13 in in_order (Solution.py)
self.in_order(p)
Line 24 in isSameTree (Solution.py)
ret = Solution().isSameTree(param_1, param_2)
Line 52 in _driver (Solution.py)
_driver()
Line 63 in <module> (Solution.py)
self.in_order(tree.left.val, result)
这一行是问题,因为 tree.left.val
不是节点。在这种情况下它是一个 int 值。