序列化二叉树

第六十题:序列化二叉树

    • 题目描述
    • 思路
          • 具体图解如下
          • 具体实现代码如下


题目描述

请实现两个函数,分别用来序列化和反序列化二叉树


思路

利用先序遍历:
将二叉树序列化为字符串
将字符串反序列化为二叉树


具体图解如下

序列化二叉树_第1张图片


具体实现代码如下
public class Solution {

    // 序列化
    String Serialize(TreeNode root) {
        StringBuffer sb = new StringBuffer();
        if (root == null){
            sb.append("#,");
            return sb.toString();
        }
        sb.append(root.val+",");
        sb.append(Serialize(root.left));
        sb.append(Serialize(root.right));
        return sb.toString();
    }

    // 反序列化
    TreeNode Deserialize(String str) {
        String[] values = str.split(",");
        Queue<String> queue = new LinkedList<String>();
        for (int i = 0; i < values.length; i++){
            queue.add(values[i]);
        }
        return reconPreOrder(queue);
    }

    // 中序遍历
    TreeNode reconPreOrder(Queue<String> queue){
        String value = queue.poll();
        if (value.equals("#")){
            return null;
        }
        TreeNode head = new TreeNode(Integer.valueOf(value));
        head.left = reconPreOrder(queue);
        head.right = reconPreOrder(queue);
        return head;
    }
}

NowCoder(Online Coding, Please Click)

你可能感兴趣的:(剑指offer)