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 值。