摘要:题目描述请实现两个函数,分别用来序列化和反序列化二叉树分析可以使用前序遍历的方法来得到二叉树的序列,然后再每个节点之间得使用一个来隔开,这样可以避免节点值之间的歧义对于空节点也需要存储下来,所以使用来存储。反序列化就解析序列化字符串即可。
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
分析可以使用前序遍历的方法来得到二叉树的序列,然后再每个节点之间得使用一个" ! "来隔开,这样可以避免节点值之间的歧义;对于空节点也需要存储下来,所以使用" # "来存储。
反序列化就解析序列化字符串即可。
function TreeNode(x) { this.val = x; this.left = null; this.right = null; } function Serialize(r) { if(r === null) return "#!"; var res = ""; var s = []; s.push(r); while(s.length !== 0){ var cur = s.pop(); res += (cur === null) ? "#" : cur.val; res += "!"; if(cur !== null) { s.push(cur.right); s.push(cur.left); } } return res; } function Deserialize(s) { if(s === "") return null; var arr = s.split("!"); return step(arr); } function step(arr) { var cur = arr.shift(); if(cur === "#") return null; var node = new TreeNode(cur); node.left = step(arr); node.right = step(arr); return node; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/96209.html
摘要:题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。那么对于二叉搜索树的后序遍历的序列来说,最后一个元素即是它的根节点,序列的前某部分元素全部小于最后一个元素,序列的后某部分元素全大于最后一个元素。 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 分析 所谓二叉搜索...
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 分析 前序遍历是中左右的顺序,中序遍历是左中右的顺序,那么对于{1,2,4,7,3,5,6,8}和{4,7,2,1,5,3,8,6}来说,1是根节点,然...
摘要:节点类二叉树类实现了二叉树插入删除查找前序遍历中序遍历后序遍历层序遍历二叉树序列化和反序列化二叉树的常见操作增加删除查找先序中序后序层序遍历序列化二叉树先序层序序列化和反序列化先序反序列化层序序列化层序反序列化数据测试建立一棵二叉树参考资料 节点类 public class Node { public Node left; public Node...
阅读 3737·2021-09-09 09:33
阅读 3024·2019-08-30 15:56
阅读 3017·2019-08-30 15:56
阅读 3307·2019-08-30 15:55
阅读 499·2019-08-30 15:53
阅读 2179·2019-08-30 15:52
阅读 662·2019-08-28 18:16
阅读 2390·2019-08-26 13:51