Algorithm 使用左/右括号序列化和反序列化树

Algorithm 使用左/右括号序列化和反序列化树,algorithm,Algorithm,这里的树有n个节点(不是二叉树!) 我试图实现以下想法 1 (1((2)(3)(4))) / \ \ 2 3 4 (2) (3) (4) 我的初始算法起草如下。序列化函数是在每次调用时返回(根(子节点))。反序列化函数用于从括号中构造根节点及其子节点 有人能理解为什么实现不正确吗 def序列化(self,root): “”“将树编码为单个字符串。 :type root:Node :rtype:str """ 如果不是根:返回“” 如果不是root

这里的树有n个节点(不是二叉树!)

我试图实现以下想法

     1       (1((2)(3)(4)))
   /  \  \
  2    3  4
(2)  (3)  (4)
我的初始算法起草如下。序列化函数是在每次调用时返回
子节点
)。反序列化函数用于从括号中构造根节点及其子节点

有人能理解为什么实现不正确吗

def序列化(self,root):
“”“将树编码为单个字符串。
:type root:Node
:rtype:str
"""
如果不是根:返回“”
如果不是root.children:return'('+str(root.val)+')
res=“(”
对于root.children中的child:
res+=self.serialize(子级)
(2)(3)(4))
返回'('+str(root.val)+res+')'#(1((2)(3)(4)))
def反序列化(自身、数据):
“”“将编码的数据解码到树中。
:类型数据:str
:rtype:Node
"""
#       ^
# 0 1 2 3 ...
# ( 1 ( ( 2 )(3) ) )
如果不是数据:返回None
val=数据[1]
根=节点(int(val))
root.children=[]
左=0
start=3#如上所示选择3(跳过所有括号,直到看到孩子)
对于范围(3,len(data)-2)中的i:#出于同样的原因跳过最后的括号
如果数据[i]=='(':左+=1
如果数据[i]==')':
左-=1
如果左==0:
child=self.deserialize(数据[start:i+1])
root.children.append(子级)
开始=i+1
返回根

实施中到底有什么不正确之处?你能给我们看一个它断开的例子吗?顺便说一句,你可能不需要
((2)(3)(4))
的第一个圆括号,因为你在解析器中跳过了它们