序列化二叉树

Posted 前端你好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化二叉树相关的知识,希望对你有一定的参考价值。


题目:请实现两个函数,分别用来序列化和反序列化二叉树。


例子: 

例1

输入:[1,2,3,null,null,4,5]

输出:[1,2,3,null,null,4,5]


分析:使用DFS和递归算法结合前序遍历来解答

序列化

(1)深度优先遍历整个二叉树,遇到null就将其序列化一个特殊字符($)

(2)节点与节点之间用,隔开。

反序列化

(1)定义函数 buildTree 用于还原二叉树,传入由序列化字符串转成的 list 数组。

(2)逐个 pop 出 list 的首项,构建当前子树的根节点,顺着 list,构建顺序是根节点 > 左子树 > 右子树。

    如果弹出的字符为 "$",则返回 null 节点。

    如果弹出的字符是数值,则创建root节点,并递归构建root的左右子树,最后返回root。


解:

序列化

const serialize = (root) => { if (root == null) { // 遍历到 null 节点 return '$'; } const left = serialize(root.left); // 左子树的序列化结果 const right = serialize(root.right); // 右子树的序列化结果 return root.val + ',' + left + ','+ right; // 按 根,左,右 拼接字符串};

反序列化

function TreeNode(val) {  // 创建节点 this.val = val; this.left = this.right = null;}
const deserialize = (data) => { const list = data.split(','); // split成数组
const buildTree = (list) => { // 基于list构建当前子树 const rootVal = list.shift(); // 弹出首项,获取它的“数据” if (rootVal == "$") { // 是$,返回null节点 return null; } const root = new TreeNode(rootVal); // 不是$,则创建节点 root.left = buildTree(list); // 递归构建左子树 root.right = buildTree(list); // 递归构建右子树 return root; // 返回当前构建好的root }; return buildTree(list); // 构建的入口};

序列化二叉树 

长按关注我吧  

以上是关于序列化二叉树的主要内容,如果未能解决你的问题,请参考以下文章

Offer[37] 序列化二叉树

编程实现以上二叉树中序遍历操作,输出遍历序列,求写代码~~

63.序列化二叉树

与二叉树有关的编程题的Java代码实现

50.序列化二叉树

剑指OFFER 序列化二叉树