内容简介:按照前序遍历序列化出来的结果为: 8,6,5,#,#,7,#,#,6,7,#,#,5,#,#反序列化:按规定的字符串输出二叉树思路:
参考自ConardLi: 《对称的二叉树》 公众号: code秘密花园
如下二叉树:
8
/ \
6 6
/\ /\
5 7 7 5
按照前序遍历序列化出来的结果为: 8,6,5,#,#,7,#,#,6,7,#,#,5,#,#
反序列化:按规定的字符串输出二叉树
思路:
1.如果二叉树是一颗完全二叉树,只需知道前序遍历即可重建
2.在序列化二叉树时,可以将空节点使用特殊符号存储起来,这个就可以模拟一颗完全二叉树的前序遍历
3.在重建二叉树时,当遇到特殊符号当空节点进行处理
步骤1:模拟一个二叉树
const symmetricalTree = {
val: 8,
left: {
val: 6,
left: { val: 5, left: null, right: null },
right: { val: 7, left: null, right: null }
},
right: {
val: 6,
left: { val: 7, left: null, right: null },
right: { val: 5, left: null, right: null }
}
}
步骤2:
//序列化
function Serialize(pRoot, arr = []) {
if (!pRoot) {
arr.push('#');
} else {
arr.push(pRoot.val);
Serialize(pRoot.left, arr);
Serialize(pRoot.right, arr);
}
return arr.join(',');
}
步骤3:
//反序列化
function Deserialize(str) {
if (!str) {
return null;
}
return deserialize(str.split(','));
}
function deserialize (arr) {
let node = null;
const current = arr.shift();
if (current !== '#') {
node = { val: current };
node.left = deserialize(arr);
node.right = deserialize(arr);
}
return node;
}
输出
console.log(Serialize(symmetricalTree));
console.log(Deserialize('8,6,5,#,#,7,#,#,6,7,#,#,5,#,#'));
结果如下:
8,6,5,#,#,7,#,#,6,7,#,#,5,#,#
{ val: '8',
left:
{ val: '6',
left: { val: '5', left: null, right: null },
right: { val: '7', left: null, right: null } },
right:
{ val: '6',
left: { val: '7', left: null, right: null },
right: { val: '5', left: null, right: null } } }
参考自ConardLi: 《对称的二叉树》 公众号: code秘密花园
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ruby on Rails电子商务实战
Christian Hellsten、Jarkko Laine / 曹维远 / 人民邮电出版社 / 2008-4 / 49.00元
《Ruby on Rails电子商务实战》全面讲解了使用Ruby on Rails创建产品级应用程序的过程。书中通过演示构建网上书店的全过程,先后介绍如何使用如TDD的敏捷实践,启动一个项目并建立良好稳定的基础,如何深入Ruby on Rails,实现诸如将应用程序翻译成各种语言对产品进行调试等的普遍需求。其中用到的主要技术包括Ajax、聚合、设置标签和国际化等,还介绍了如何使用ActiveRec......一起来看看 《Ruby on Rails电子商务实战》 这本书的介绍吧!