摘要:参考自对称的二叉树公众号秘密花园如下二叉树按照前序遍历序列化出来的结果为反序列化按规定的字符串输出二叉树思路如果二叉树是一颗完全二叉树只需知道前序遍历即可重建在序列化二叉树时可以将空节点使用特殊符号存储起来这个就可以模拟一颗完全二叉树的前序
参考自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秘密花园
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/104979.html
摘要:另外,由于篇幅有限,本篇的重点在于二叉树的常见算法以及实现。常见的二叉树实现代码之前写过相关的文章,是关于如何创建及遍历二叉树的,这里不再赘述。同时我们注意到,在二叉树深度比较大的时候,我们光是比较左右是不够的。 本篇为复习过程中遇到过的总结,同时也给准备面试的同学一份参考。另外,由于篇幅有限,本篇的重点在于二叉树的常见算法以及实现。 常见的二叉树实现代码 之前写过相关的文章,是关于如...
摘要:推导前序序列已知二叉树的中序序列是,后序序列是,求前序序列。二叉树的中序序列是按照左子树,根,右子树的顺序排列的,根将左子树的序列和右子树的序列分割在左右两边。 推导前序序列 已知二叉树的中序序列是ABCDEFG,后序序列是BDCAFGE,求前序序列。 思路 showImg(https://segmentfault.com/img/bVW1es?w=723&h=431); 二叉树的后序...
摘要:因此,根据题目给出的先序遍历和中序遍历,可以画出二叉树选参考数据结构与算法描述实现二叉树算法浅谈数据结构二叉树慕课网实现二叉树算法前端树控件腾讯软件开发面试题 内容衔接上一章 数据结构与算法:常见排序算法 内容提要 什么是树 - 为什么使用树 二叉树 二叉查找树 红黑树 B、B+树 堆 伸展树 树 可以点击链接感受下笔者用d3.js画的tree https://codepen...
阅读 3155·2021-11-08 13:18
阅读 1337·2021-10-09 09:57
阅读 1157·2021-09-22 15:33
阅读 3889·2021-08-17 10:12
阅读 4986·2021-08-16 11:02
阅读 2654·2019-08-30 10:56
阅读 948·2019-08-29 18:31
阅读 3226·2019-08-29 16:30