网站的程序怎么做的建筑设计装修
2026/6/9 23:52:28 网站建设 项目流程
网站的程序怎么做的,建筑设计装修,企业网站推广营销,贾汪建设局网站输入#xff1a; 二叉树的根节点 root。 要求#xff1a; 设计一个算法#xff0c;将二叉树序列化为一个字符串#xff0c;并且可以将该字符串反序列化为原始的树结构。不限制具体的序列化逻辑#xff08;如前序、层序等#xff09;#xff0c;只要保证“编码 - 解码…输入二叉树的根节点root。要求设计一个算法将二叉树序列化为一个字符串并且可以将该字符串反序列化为原始的树结构。不限制具体的序列化逻辑如前序、层序等只要保证“编码 - 解码”过程可逆且准确即可。输出serialize: 返回编码后的string。deserialize: 返回还原后的TreeNode*。本题很有意思序列化与反序列化然后全程只有一个字符串传递之前我们已经做到简单版的问题这一题一部分难点在于如何用string传递足够多的信息颇有点计算机的本质了就是信息的传递。采用了一种自定义的“定长编码协议”结合 BFS 来实现避免了复杂的字符串分割操作。序列化 (Serialize) - 定长编码规则使用层序遍历 (BFS)。不使用分隔符如逗号而是将每个节点的信息固定编码为7个字符的字符串片段。格式定义[符号位 1位][数值位 4位][左孩子存在标志 1位][右孩子存在标志 1位]。第1位符号。0表示正数1表示负数。第2-5位数值的绝对值不足4位前面补0已知数值范围在 -1000 到 1000 之间。第6位左孩子标记。1表示有左孩子0表示无。第7位右孩子标记。1表示有右孩子0表示无。遍历过程中如果孩子存在将其入队并在当前节点的字符串中标记为1否则标记0且不记录空节点的数据。反序列化 (Deserialize) - 双指针索引法同样利用队列进行 BFS 重建。维护两个索引模拟指针Idx指向当前正在处理的父节点在字符串中的位置索引第几个节点。Cur指向字符串中下一个待分配的数据块的位置索引。流程先解析前7个字符构建根节点入队。当队列不为空时取出队头节点对应Idx指向的数据块。读取Idx数据块的第6位和第7位左右孩子标记。如果标记为1则从Cur指向的位置读取7个字符构建子节点连接到父节点子节点入队并让Cur加 1。处理完当前节点后Idx加 1。复杂度时间复杂度O(N)序列化和反序列化都需要遍历树中所有的节点一次。空间复杂度O(N)需要使用队列进行层序遍历队列最大长度为树的一层节点数。同时需要存储序列化后的字符串长度与节点数成正比。classCodec{public:// Encodes a tree to a single string.stringserialize(TreeNode*root){if(!root)return;queueTreeNode*q;string ser;q.push(root);while(!q.empty()){intnq.size();for(inti0;in;i){TreeNode*tq.front();q.pop();if(t-val0){ser0;}else{ser1;}string valStrto_string(abs(t-val));while(valStr.length()4){valStr0valStr;}servalStr;if(t-left!nullptr){ser1;q.push(t-left);}else{ser0;}if(t-right!nullptr){ser1;q.push(t-right);}else{ser0;}}}returnser;}TreeNode*deserialize(string data){if(data){returnnullptr;}introotVal(data[1]-0)*1000(data[2]-0)*100(data[3]-0)*10(data[4]-0);if(data[0]1){rootVal-rootVal;}TreeNode*rootnewTreeNode(rootVal);queueTreeNode*q;q.push(root);intCur1;intIdx0;while(!q.empty()){intnq.size();for(inti0;in;i){TreeNode*tq.front();q.pop();if(data[Idx*75]1){intleftVal(data[Cur*71]-0)*1000(data[Cur*72]-0)*100(data[Cur*73]-0)*10(data[Cur*74]-0);if(data[Cur*7]1){leftVal-leftVal;}TreeNode*tmpnewTreeNode(leftVal);t-lefttmp;q.push(tmp);Cur;}if(data[Idx*76]1){intrightVal(data[Cur*71]-0)*1000(data[Cur*72]-0)*100(data[Cur*73]-0)*10(data[Cur*74]-0);if(data[Cur*7]1){rightVal-rightVal;}TreeNode*tmpnewTreeNode(rightVal);t-righttmp;q.push(tmp);Cur;}Idx;}}returnroot;}};

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询