【剑指Offer】序列化二叉树

本文介绍了一种实现二叉树序列化和反序列化的方法,使用前序遍历进行序列化,并通过递归方式实现了从序列化字符串中重建原始二叉树结构的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

时间限制:1秒 空间限制:32768K

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


解题思路

题目描述有问题。。。样例也没有。。。
(1)序列化:看了大家的讨论才知道这道题序列化的意思。例如下面树的序列化:(前序遍历)
        8
       /  \
      7   4
     /    /  \
   6    3    2
序列化为:8,7,6,#,#,#4,3,#,#,2,#,#
(2)反序列化:前序遍历建树。

代码(Java)

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}

public class Main {

    //当前访问树序列化的序号
    static int index = -1;

    //序列化,这里前序遍历,序列化后为8,7,6,#,#,#4,3,#,#,2,#,#,
    public static String Serialize(TreeNode root) {
        StringBuffer ans = new StringBuffer();
        if(root == null) {
            ans.append("#,");
            return ans.toString();
        }
        ans.append(root.val+",");
        ans.append(Serialize(root.left));
        ans.append(Serialize(root.right));
        return ans.toString();
    }

    //反序列化
    public static TreeNode Deserialize(String str) {
        index++;
        String[] nodes = str.split(",");
        if(index >= nodes.length)return null;
        TreeNode ans = null;
        //空结点直接返回空
        while(!nodes[index].equals("#")) {
            ans = new TreeNode(Integer.valueOf(nodes[index]));
            ans.left = Deserialize(str);
            ans.right = Deserialize(str);
        }
        return ans;
    }

    /*
        测试代码
     */
    public static void main(String []args){

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值