序列化二叉树

本文介绍了一种使用前序遍历方法来序列化和反序列化二叉树的算法。通过将二叉树转换为字符串,并能够从该字符串重建原始二叉树结构,实现了二叉树的有效存储和读取。

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

package niuke;

/*题目描述:请实现两个函数,分别用来序列化和反序列化二叉树 
思路:二叉树的序列化就是按照某种顺序遍历二叉树,遇到空结点是在遍历输出序列中 
加入某个特殊字符进行标识,反序列化就是按照同样的规则将一个序列还原为一颗二叉树。 
这里采用前序遍历的顺序进行序列化*/
public class SortNumber {
    
    static String str = "";
     public static void main(String[] args) {
        TreeNode r1 = new TreeNode(1);
        TreeNode r2 = new TreeNode(2);
        TreeNode r3 = new TreeNode(3);
        TreeNode r4 = new TreeNode(4);
        TreeNode r5 = new TreeNode(5);
        r1.left = r2;
        r1.right = r3;
        r2.left = r4;
        r2.right = r5;
        String str = Serialize(r1);
        System.out.println(str);
        System.out.println(Deserialize(str));
     }
      
      
     static String Serialize(TreeNode root) {
        if(root == null) {
            str = str +"#,";        //遇到空,则在字符串之后加#
            return str;
        }
        str = str+String.valueOf(root.val)+",";   //先跟节点
        Serialize(root.left);                     //再左子树
        Serialize(root.right);                    //再右子树
        return str.substring(0, str.length()-1);
         
     }
     static int count = -1;              //设为全局变量这样在递归的时候不会被刷新
     static TreeNode Deserialize(String str) {
        count++;
         String[] s1 = str.split(",");        //以,把字符串进行分割
         TreeNode t1 = null;
         if(!s1[count].equals("#")) {          //当不是空指针的时候
             t1 = new TreeNode(Integer.valueOf(s1[count]));  //对应值建立节点
             t1.left  = Deserialize(str);       //对其添加左子树节点
             t1.right  = Deserialize(str);      //对其添加右子树节点
         }
         return t1;
      }
     
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值