序列化二叉树

本贴最后更新于 2450 天前,其中的信息可能已经东海扬尘

题目描述

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

序列化:遍历二叉树为字符串。

反序列化:依据字符串构造二叉树。

解题思路

依据前序遍历来序列化二叉树,如果是 null 指针,则转为特殊字符“#”。这样字符串中包含了所有结点和每个叶子结点下的空节点。

反序列化根据前序遍历,遇到特殊字符“#”就返回 Null。

代码

public class Solution {
    private StringBuilder sb = new StringBuilder();
    private int index = -1;
    String Serialize(TreeNode root) {
        if(root == null){
            sb.append("#,");
            return sb.toString();
        }
        sb.append(root.val + ",");
        Serialize(root.left);
        Serialize(root.right);
        return sb.toString();
    }
    
    TreeNode Deserialize(String str) {
        index++;
        String[] strr = str.split(",");
        TreeNode node = null;
        if(!strr[index].equals("#")){
            node = new TreeNode(Integer.valueOf(strr[index]));
            node.left = Deserialize(str);
            node.right = Deserialize(str);
        }
        return node;
    }
}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...