剑指Offer-Java-序列化二叉树

本文介绍了一种实现二叉树序列化和反序列化的算法,通过使用特定的字符串格式来保存和恢复二叉树结构。序列化过程将二叉树转换为字符串,而反序列化则能从该字符串重建原来的二叉树。

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

题目

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

代码

此题的核心点是如何表示二叉树,并且解释。

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
import java.util.*;
public class Solution {
    String Serialize(TreeNode root) {
        StringBuilder string = new StringBuilder();
        S(root,string);
        return string.toString();
    }
    void S(TreeNode root,StringBuilder string){
    	//当没有子节点的时候加上#!
        if(root==null){
            string.append("#!");
            return;
        }
        //在每个数据后面都加上!
        //所以当整个字符串用!分割以后 无节点的时候为#,有节点的时候为其数据
        string.append(root.val+"!");
        S(root.left,string);
        S(root.right,string);
    }
    TreeNode Deserialize(String str) {
        String[] string = str.split("!");
        TreeNode root = D(string);
        return root;
    }
    int index = 0;
    TreeNode D(String[] string){
    	//当为#的时候说明没有,index后移 并且返回null
        if(string[index].equals("#")){
            index++;
            return null;
        }else{
        	//当有节点的时候先构造节点,再对其左子树和右子树进行构造,次数的left和right不能互换方向,因为在序列化的时候的顺序是先序及先root再left,right。所以其顺序不可变
            TreeNode temp = new TreeNode(Integer.parseInt(string[index]));
            index++;
            temp.left=D(string);
            temp.right=D(string);
            return temp;
        }
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值