如何 运行 本地 TreeNode python

How to run TreeNode locally python

我有一个非常愚蠢的问题,我的头脑似乎无法解决。 我想在本地而不是在 leetcode 上进行测试。我如何 运行 这个?

# 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(object):
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if root is None:
            return []
        
        stack, output = [root, ], []
        
        while stack:
            root = stack.pop()
            if root is not None:
                output.append(root.val) # Error here
                if root.right is not None:
                    stack.append(root.right)
                if root.left is not None:
                    stack.append(root.left)
        
        return output

我的尝试是:

input = [1,None,2,3]

s = Solution()
print(s.preorderTraversal(input))

但我收到错误消息:

AttributeError: 'list' object has no attribute 'val'

一些代码挑战网站,例如 Leet Code,会将列表输入(实际上是具有 JSON 符号的 text 输入)转换为 TreeNode,并将 that 作为参数传递给包含您的解决方案代码的函数。

当您想 运行 本地解决方案时,您必须自己处理此转换。为此,您可以使用此功能——特别适用于二叉树:

def fromlist(values):
    def create(it):
        value = next(it)
        return None if value is None else TreeNode(value)
        
    if not values:
        return None
    it = iter(values)
    root = TreeNode(next(it))
    nextlevel = [root]
    try:
        while nextlevel:
            level = nextlevel
            nextlevel = []
            for node in level:
                if node:
                    node.left = create(it)
                    node.right = create(it)
                    nextlevel += [node.left, node.right]
        
    except StopIteration:
        return root
    raise ValueError("Invalid list")

对于你的情况,你可以这样称呼它:

input = [1,None,2,3]
s = Solution()
print(s.preorderTraversal(fromlist(input)))