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.
大概意思就是说Binary Tree可以被编码成为一串字,可以从这串字里解码还原Binary Tree.
这个编码的方法随意,只要有办法还原就可以。
一个比较common的Approach.
Function encode():
就是拿一个list,然后preorder traverse BST, 把node.val放进去。
List =>[a,b,c,d,e,null,...];
Function Decode() 解码是一个比较难的
从一个pre-order traversal 还原一个BST。【记得之前就曾经考过把一个Sorted List 做成一个 Binary Tree, Always choose mid as root】. 这个是一个很好的方法,但是其实没有必要多sort一遍,因为我们的encoding是按顺序来的,有更好的办法。
用Deque 来搞事情。
先把List里的data放在Deque里,然后不断remove。 Deque 的remove应该是从head开始,所以我们第一个就拿到了head/root. 然后开始往下面造树。由于顺序是按preorder traversal encode的,也就是说list里的node就是逻辑上从tree的上面往下比划时候大概的顺序,所以按着顺序remove,可以recover BST.