面试题三十七:序列化二叉树

 

题目描述请实现两个函数,分别用来序列化和反序列化二叉树
思路
二叉树的序列化就是采用前序遍历二叉树输出节点,再碰到左子节点或者右子节点为None的时候输出一个特殊字符“$”。
对于反序列化,就是针对输入的一个序列构建一棵二叉树,我们可以设置一个指针先指向序列的最开始,然后把指针指向位置的数字转化为二叉树的结点,后移一个数字,继续转化为左子树和右子树。

 //序列化直接用递归的办法前序遍历二叉树,其中碰到空就加个$。
            public void serialize(BinaryTreeNode root, StringBuffer sb){
                if(root == null)
                    sb.append("$");
                else{
                    sb.append(root.value);
                    serialize(root.left,sb);
                    serialize(root.right,sb);
                }
            }

            //反序列化
            public void deserialize(BinaryTreeNode root,StringBuffer sb){
                StringBuffer temp =  sb.deleteCharAt(0);
                if(temp != null && temp != new StringBuffer('$')){
                    root = new BinaryTreeNode(temp.toString().charAt(0));
                    deserialize(root.left, sb);
                    deserialize(root.right, sb);
                }
            }

 

posted @ 2020-03-29 15:10  浪波激泥  阅读(169)  评论(0编辑  收藏  举报