首页 > 编程语言 >算法总结

算法总结

时间:2022-08-28 22:11:14浏览次数:41  
标签:总结 String dataList 算法 二叉树 str 序列化 root

1.序列化与反序列化二叉树

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

题解:就是将遍历二叉树将树变成字符串,然后把字符串变成二叉树

package com.chenghaixiang.jianzhi2.day16;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office048 {
}
//序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
//
//请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

//深度优先搜索
class Codec {

    //序列化
    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        return rserialize(root,"");
    }

    String rserialize(TreeNode root,String str){
        if(root==null){
            str=str+"None,";
        }else {
            //将int类型转换为String
            str+=str.valueOf(root.val)+",";
            str=rserialize(root.left,str);
            str=rserialize(root.right,str);
        }
        return str;
    }

    //反序列化
    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        String[] dataArray=data.split(",");
        //Arrays.asList返回由指定数组支持的固定大小的列表。
        List<String> dataList=new LinkedList<>(Arrays.asList(dataArray));
        return rdeserialize(dataList);
    }

    TreeNode rdeserialize(List<String> dataList){
        if(dataList.get(0).equals("None")){
            dataList.remove(0);
            return null;
        }

        //将链表的值还原成二叉树
        TreeNode root=new TreeNode(Integer.valueOf(dataList.get(0)));
        //还原后删除当前值
        dataList.remove(0);
        root.left=rdeserialize(dataList);
        root.right=rdeserialize(dataList);
        return root;
    }
}
View Code

 

标签:总结,String,dataList,算法,二叉树,str,序列化,root
From: https://www.cnblogs.com/chenghaixiang/p/16633841.html

相关文章

  • 【博学谷学习记录】超强总结,用心分享。SSM框架的注解开发
    1.MyBatis使用的注解@Select注解:查询操作的,加在声明方法上@Insert注解:插入操作@Update注解:更新操作@Delect注解:删除操作@Param注解:作用是给参数......
  • 数据结构和算法的介绍
    声明:此系列以尚硅谷数据结构与算法(Java数据结构与算法)视频为主,包括其他大佬的文章(相关文中有引用注明来源)在此声明一次,后续文档中不再声明。目录数据结构和算法的关系算......
  • 825周总结
    目录前端一、前端与后端的概念二、前端的核心基础三、超文本传输协议1.四大特性2.数据格式3.响应状态码四、HTML1.简介2.语法3.head内常见标签4.body内部标签5.块级标签和......
  • 【前端】周总结
    目录1.前端简介1.1前端与后端1.2前端的学习1.3HTTP超文本传输协议2.HTML2.1HTML简介2.2HTML标签3.CSS3.1CSS选择器3.2CSS相关属性3.3盒子、浮动、溢出、定位、......
  • 百度之星的总结
    一个字,寄.从昨天岔路迷惑我很久,到今天按着那棵树调我的概率,,最后才看到是求的时间的期望,,,,把大量时间和精力浪费到了看错题目上.而且没有有效地转换题目,死磕带来......
  • 假期第五周总结
    这周,我和朋友们集体去了延吉旅游,玩了一周,第一天,我们坐高铁乘车到了延吉,第一次来到延吉,我被这边的人文风情给震撼到了,或许是临界边境,这边的人都比较有朝鲜族的风情,我跟朋友......
  • 每周总结8
    getElementByName方法返回的是一个对象的集合也就是说getElementByName这个可以匹配多个对象在返回的元素中,每个对象都是dom对象设置全选<head><metacharset=......
  • 流行的机器学习优化算法
    流行的机器学习优化算法Photoby康尼施耐德on不飞溅机器学习中的优化是在给定一组输入的情况下找到正确预测的迭代过程。在每次迭代中,目标是减少预测值与实际值之......
  • 周总结-10week
    目录周总结-10week前端简介超文本传输协议前戏HTTP超文本传输协议HTML简介head内常见标签body内基本标签块儿级标签与行内标签body内基本符号body内布局标签body内常见标签......
  • LetCode算法--3.找找两个正序数组的中位数
    给定两个大小分别为m和n的正序(从小到大)数组 nums1和 nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。来源:力扣(LeetCode......