You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * Encodes a tree to a single string. * * @param {TreeNode} root * @return {string} */varserialize=function(root){letqueue=[root];// 使用队列遍历二叉树letserialized=[];// 用数组存储序列化后的值// 队列被清空时,表示完成了二叉树的遍历while(queue.length){// 缓存当前一行的节点数量letqueueLength=queue.length;// 将当前一行的节点出队,进行处理for(leti=0;i<queueLength;i++){constnode=queue.shift();if(node){// 如果当前节点不为null,将其值存入serializedserialized.push(node.val);// 将左右子节点存入队列,供下一行遍历处理// 队列中的节点,总是保持根、左、右的顺序排列queue.push(node.left,node.right);}else{// 如果当前节点为null,将X存入serializedserialized.push('X');}}}// 将数组转换成字符串返回returnserialized.join(',');};/** * Decodes your encoded data to tree. * * @param {string} data * @return {TreeNode} */vardeserialize=function(data){// 如果根节点为null,那么data为X,直接返回null即可if(data==='X'){returnnull;}// 将data转换为数组方便依次处理constvalList=data.split(',');// 从数组中出队根节点的值,创建一个根节点constroot=newTreeNode(valList.shift());// 将根节点存入队列,使用队列辅助创建二叉树letqueue=[root];// valList被清空,表示所有值都已用来创建二叉树while(valList.length){// 从队列中出队一个节点constnode=queue.shift();// 因为valList中的值都是按照根、左、右排列,所以可以从valList连续出队左右子节点的值constleft=valList.shift();constright=valList.shift();// 如果值不为空,就创建一个节点// 此时意味着valList还存有其子节点的值,此时只需要将节点存入queue,即可在下一次循环中处理if(left!=='X'){node.left=newTreeNode(left);queue.push(node.left);}if(right!=='X'){node.right=newTreeNode(right);queue.push(node.right);}}// 将生成的二叉树根节点返回即可returnroot;};/** * Your functions will be called as such: * deserialize(serialize(root)); */
The text was updated successfully, but these errors were encountered:
原题链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
解题思路:
[1,2,3,null,null,4,5]
的形式,只要能够输出为1,2,X,X,3,4,X,X,5,X,X
(X表示节点为null),并且重新反序列化为二叉树即可。serialized
中。serialized
。serialized
,同时将左右子树存入queue
,这样就保证了serialized
中是按照根、左、右的顺序存储值。serialized
转化为字符串返回即可。queue
生成二叉树即可。valList
,每次循环从valList
中出队两个值,分别为左右子节点的值。如果值存在,就用其创建一个节点。valList
中出队的同时,从queue
中出队一个节点,将其和左右子节点相连接。valList
中元素被清空时,表示二叉树已经生成完毕。The text was updated successfully, but these errors were encountered: