fucking-algorithm icon indicating copy to clipboard operation
fucking-algorithm copied to clipboard

[bug][python] xu-lie-hua-er-cha-shu-lcof

Open labuladong opened this issue 1 year ago • 1 comments

此 issue 的目的是修复 chatGPT 转译的多语言代码,更详细的背景信息和修复流程见:https://github.com/labuladong/fucking-algorithm/issues/1113

请在提交 bug 之前先搜索

  • [X] 我已经搜索过 issues,没有发现相同的 bug。

出错的题目链接

https://leetcode.cn/problems/xu-lie-hua-er-cha-shu-lcof/

报错信息

Line 19: AttributeError: 'NoneType' object has no attribute 'append'
AttributeError: 'NoneType' object has no attribute 'append'
    sb.append(str(root.val)).append(self.SEP)
Line 19 in _serialize (Solution.py)
    self._serialize(root, sb)
Line 9 in serialize (Solution.py)
    return codec.deserialize(codec.serialize(root))
Line 48 in __helper__ (Solution.py)
    ret = __DriverSolution__().__helper__(
Line 61 in _driver (Solution.py)
    _driver()
Line 73 in <module> (Solution.py)

你是否愿意提交 PR 修复这个 bug?

  • [ ] 我愿意!

labuladong avatar Mar 26 '23 09:03 labuladong

#根据题目示例中的例子,序列化结果为vals=[1,2,3,null,null,4,5,null,null,null,null],对应到二叉树中,根节点为1,其左右子节点为2,3,序列中对应序号为1,2 ''' 1.创建一个队列queue,初始时只有根节点,表示当前处理到的节点。 2.初始化一个序列下标,从1开始。 3.取出队列中第一个节点node,i对应的如果不为空,则说明val=vals[i]的节点为node的左子节点,将node.left加入队列。i后移一位,同样如果vals[i]不为空,则对应node的右子节点,node.right加入队列。 ''' class Codec:

def serialize(self, root):
    if not root:
        return "[]"
    queue = collections.deque()
    queue.append(root)
    result = []
    while queue:
        node = queue.popleft()
        if node != None:
            result.append(str(node.val))
            queue.append(node.left)
            queue.append(node.right)
        else:
            result.append("null")
    return '[' + ','.join(result) + ']'

def deserialize(self, data):
    if data == "[]":
        return
    vals = data[1:-1].split(',')
    root = TreeNode((int(vals[0])))
    i = 1
    queue = collections.deque()
    queue.append(root)
    while queue:
        node = queue.popleft()
        if vals[i] != "null":
            node.left = TreeNode(int(vals[i]))
            queue.append(node.left)
        i = i + 1
        if vals[i] != "null":
            node.right = TreeNode(int(vals[i]))
            queue.append(node.right)
        i = i + 1
    return root

sucst avatar Apr 16 '23 10:04 sucst