树Serialize and Deserialize Binary Tree
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树Serialize and Deserialize Binary Tree相关的知识,希望对你有一定的参考价值。
题目:
Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.
Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.
For example, you may serialize the following tree
1 / 2 3 / 4 5
as "[1,2,3,null,null,4,5]"
, just the same as how LeetCode OJ serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
思路:
序列化:层序遍历二叉树。
反序列化:层序构建二叉树。
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * Encodes a tree to a single string. * * @param {TreeNode} root * @return {string} */ var serialize = function(root) { if(root==null){ return []; } var queue=[],res=[]; queue.push(root); while(queue.length!=0){ var p=queue.unshift(); res.push(p.val); if(p!=null){ queue.push(p.left.val); queue.push(p.right.val); } } return res; }; /** * Decodes your encoded data to tree. * * @param {string} data * @return {TreeNode} */ var deserialize = function(data) { if(data.length==0){ return null; } var root=new TreeNode(data[0]),queue=[],res,loc=1; queue.push(root); while(queue.length!=0){ var p=queue.unshift(); var count=0; while(count<2){ count++; var child=null; if(data[loc]==null){ if(loc%2!=0){ child=new TreeNode(data[loc]); p.left=child; }else{ child=new TreeNode(data[loc]); p.right=child; } queue.push(child); }else{ if(loc%2!=0){ p.left=null; }else{ child=new TreeNode(data[loc]); p.right=null; } } } } return root; }; /** * Your functions will be called as such: * deserialize(serialize(root)); */
以上是关于树Serialize and Deserialize Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章
LintCode 7.Serialize and Deserialize Binary Tree(含测试代码)
297. 二叉树的序列化与反序列化(Serialize and Deserialize Binary Tree)
[Lintcode]7. Serialize and Deserialize Binary Tree/[Leetcode]297. Serialize and Deserialize Binary T
449. Serialize and Deserialize BST