二叉树序列化和反序列化

二叉树序列化和反序列化

二叉树的序列化和反序列其实很简单。序列化可以暴力的理解为将一颗形象的树型结构压扁成链型结构,这个链型结构可以想象成一列火车,这列火车可以用队列表示,里面每节车厢存储了二叉树的各个节点值和辅助信息(方便反序列); 反序列就是将火车车厢里的东西倒出来,根据其进入车厢的顺序,将节点值和辅助信息有序的排列起来,还原成原来的二叉树。

eg:

该二叉树序列化可表示为:

具体代码实现

public class Codec {
    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
	//第一个辅助信息,他的本质就是如果一个节点没有哪个子节点(左节点或右节点),
	//这个子节点就用这个辅助信息表示,即占个坑,防止1_12和1_1_2的情况出现
	if(root == null){
		return "#_";
	}
	//如果该节点的值不为空,则用“_”连接下一个节点信息,res可以理解为火车
	String res = root.val + "_";
	//采用递归将所有节点信息装进火车
	res += serialize(root.left);
	res += serialize(root.right);
	return res;
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        if(data!=null){
	      //首先用“_”对所有字符串进行分割,得到字符串数组
	      String[] value = data.split("_");
	      if(value.length>0){
			Queue<String> list = new LinkedList<>();
			//遍历数组
			for(int i = 0;i!=value.length;i++){
			      //将数组内容压入队列中
				list.offer(value[i]);
			}
			return reconPreOrder(list);
	      }
	}
	      return null;
    }
      public TreeNode reconPreOrder(Queue<String> list){
            //从队列中弹出所有数组内容
	    String value = list.poll();
            //如果是“#”代表他的节点值为空
	    if(value.equals("#")){
		return null;
	    }
	    //将字符串转为整形,并把它建成树
	    Node head = new Node(Integer.valueOf(value));
	    head.left = reconPreOrder(list);
	    head.right = reconPreOrder(list);
	    return head;
      }
}
展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值