Encode+Decode 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.

大概意思就是说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.


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容