"""# Definition for a Node.class Node(object): def __init__(self, val: Optional[int] = None, children: Optional[List['Node']] = None): self.val = val self.children = children"""classCodec:defserialize(self,root:'Node')->str:ifrootisNone:return''ans=[str(root.val)]q=deque([root])whileq:node=q.popleft()forchildinnode.childrenor[]:ans.append(str(child.val))q.append(child)ans.append('#')return','.join(ans)defdeserialize(self,data:str)->'Node':ifnotdata:returnNonevals=data.split(',')root=Node(int(vals[0]),[])q=deque([root])i=1whileq:node=q.popleft()whilevals[i]!='#':child=Node(int(vals[i]),[])node.children.append(child)q.append(child)i+=1i+=1returnroot# Your Codec object will be instantiated and called as such:# codec = Codec()# codec.deserialize(codec.serialize(root))
/*// Definition for a Node.class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, List<Node> _children) { val = _val; children = _children; }};*/classCodec{publicStringserialize(Noderoot){if(root==null){return"";}List<String>ans=newArrayList<>();Deque<Node>q=newArrayDeque<>();ans.add(String.valueOf(root.val));q.offer(root);while(!q.isEmpty()){Nodenode=q.poll();if(node.children!=null){for(Nodechild:node.children){ans.add(String.valueOf(child.val));q.offer(child);}}ans.add("#");}returnString.join(",",ans);}publicNodedeserialize(Stringdata){if("".equals(data)){returnnull;}String[]vals=data.split(",");Noderoot=newNode(Integer.parseInt(vals[0]),newArrayList<>());Deque<Node>q=newArrayDeque<>();q.offer(root);inti=1;while(!q.isEmpty()){Nodenode=q.poll();while(!"#".equals(vals[i])){Nodechild=newNode(Integer.parseInt(vals[i++]),newArrayList<>());node.children.add(child);q.offer(child);}++i;}returnroot;}}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));
/*// Definition for a Node.class Node {public: int val; vector<Node*> children; Node() {} Node(int _val) { val = _val; } Node(int _val, vector<Node*> _children) { val = _val; children = _children; }};*/classCodec{public:stringserialize(Node*root){if(!root){return"";}queue<Node*>q{{root}};stringans=to_string(root->val);while(!q.empty()){autonode=q.front();q.pop();for(autochild:node->children){ans+=","+to_string(child->val);q.push(child);}ans+=",#";}returnans;}Node*deserialize(stringdata){if(data.empty()){returnnullptr;}stringstreamss(data);stringt;getline(ss,t,',');Node*root=newNode(stoi(t),{});queue<Node*>q{{root}};while(!q.empty()){autonode=q.front();q.pop();while(getline(ss,t,',')&&t!="#"){Node*child=newNode(stoi(t),{});node->children.push_back(child);q.push(child);}}returnroot;}};// Your Codec object will be instantiated and called as such:// Codec codec;// codec.deserialize(codec.serialize(root));
/** * Definition for a Node. * type Node struct { * Val int * Children []*Node * } */typeCodecstruct{}funcConstructor()*Codec{return&Codec{}}func(this*Codec)serialize(root*Node)string{ifroot==nil{return""}ans:=[]string{strconv.Itoa(root.Val)}q:=[]*Node{root}forlen(q)>0{node:=q[0]q=q[1:]for_,child:=rangenode.Children{ans=append(ans,strconv.Itoa(child.Val))q=append(q,child)}ans=append(ans,"#")}returnstrings.Join(ans,",")}func(this*Codec)deserialize(datastring)*Node{ifdata==""{returnnil}vals:=strings.Split(data,",")v,_:=strconv.Atoi(vals[0])root:=&Node{Val:v}q:=[]*Node{root}i:=1forlen(q)>0{node:=q[0]q=q[1:]fori<len(vals)&&vals[i]!="#"{v,_=strconv.Atoi(vals[i])child:=&Node{Val:v}node.Children=append(node.Children,child)q=append(q,child)i++}i++}returnroot}/** * Your Codec object will be instantiated and called as such: * obj := Constructor(); * data := obj.serialize(root); * ans := obj.deserialize(data); */