繁体   English   中英

如何通过 Python 从列表中制作 TreeNode

[英]How do I make TreeNode from list by Python

最近,我开始学习编程的“leetcode”。 有时,我会遇到与 TreeNode 相关的问题。 https://leetcode.com/problems/longest-univalue-path/

我通常在本地运行代码以确保我的代码是否有效。 但是这些问题需要我提前准备好TreeNode,否则我无法在本地运行。 我不知道如何从列表中构建 TreeNode。

我想从 Python 的列表中制作 TreeNode,就像这里一样。

class TreeNode:
     def __init__(self, x):
         self.val = x
         self.left = None
         self.right = None

input: [5,4,5,1,1,5]

output:
TreeNode{val: 5, left: TreeNode{val: 4, left: TreeNode{val: 1, left: None, right: None}, right: TreeNode{val: 1, left: None, right: None}}, right: TreeNode{val: 5, left: TreeNode{val: 5, left: None, right: None}, right: None}}

我知道我们可以确定代码在 leetcode 上是否有效。 但是,我认为检查 leetcode 上的代码对我来说很慢。 我想在本地运行我的代码。 我希望你能帮助我。

猜猜这是你需要的:

class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
 
def creatBTree(data, index):
    pNode = None
    if index < len(data):
        if data[index] == None:
            return
        pNode = TreeNode(data[index])
        pNode.left = creatBTree(data, 2 * index + 1) # [1, 3, 7, 15, ...]
        pNode.right = creatBTree(data, 2 * index + 2) # [2, 5, 12, 25, ...]
    return pNode 

假设您正在破解pathSum ,通过调用填充树

lst = [5,4,8,11,None,13,4,7,2,None,None,None,1]
root = creatBTree(lst, 0)

看看 LeetCode 的官方解释https://support.leetcode.com/hc/en-us/articles/360011883654-What-does-1-null-2-3-mean-in-binary-tree-representation-的他们将二叉树的序列化格式转换为您在测试用例中看到的那种列表是如何工作的。 如果您想在本地针对这些测试用例运行解决方案,您还需要编写一些代码(或者我相信您可以在网上找到一些代码),这些代码将输入序列化列表、构建树并返回树的根TreeNode,因此您可以将其传递给您的find_longest_univalue_path function。

这里只是美化了 StefanPochmann的解决方案,在LeetCode 的帮助中心有描述

class TreeNode:
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

    def __repr__(self):
        return 'TreeNode({})'.format(self.val)


def deserialize(string):
    if string == '[]':
        return None
    nodes = [None if val == 'null' else TreeNode(int(val))
             for val in string.strip('[]').split(',')]
    kids = nodes[::-1]
    root = kids.pop()
    for node in nodes:
        if node:
            if kids:
                node.left = kids.pop()
            if kids:
                node.right = kids.pop()
    return root


if __name__ == '__main__':
    tree = deserialize('[3,9,20,null,null,15,7]')
    assert tree == TreeNode(3, TreeNode(9), TreeNode(20, TreeNode(15), TreeNode(7)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM