Q62:序列化二叉树

原创 2016年08月29日 15:44:02
import java.awt.List;
import BinaryTree.BinaryTreeNode;
public class Q62序列化二叉树 {
	/**
	 * 题目:序列化二叉树
	 * 题目说明:请实现两个函数,分别用来序列化和反序列化二叉树。
	 * 解题思路:区分一下序列化和反序列化:把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。
	 */
	public static void main(String[] args) {
		BinaryTreeNode root = new BinaryTreeNode();
		BinaryTreeNode node1 = new BinaryTreeNode();
		BinaryTreeNode node2 = new BinaryTreeNode();
		BinaryTreeNode node3 = new BinaryTreeNode();
		BinaryTreeNode node4 = new BinaryTreeNode();
		BinaryTreeNode node5 = new BinaryTreeNode();
		root.leftNode = node1;
		root.rightNode = node2;		
		node1.leftNode = node3;
		node2.leftNode  = node4;		
		node2.rightNode = node5;
		root.value = 1;
		node1.value = 2;
		node2.value = 3;
		node3.value = 4;
		node4.value = 5;
		node5.value = 6;
		Q62序列化二叉树  test = new Q62序列化二叉树();
		System.out.println(test.Serialize(root));
		//System.out.println();
		//String string = "1,2,4,$,$,$,3,5,$,$,6,$,$";
		test.Deserialize(test.Serialize(root));
	}
	public String Serialize(BinaryTreeNode root){//序列化,递归将对象转化为字节序列
		StringBuilder stringBuilder = new StringBuilder();
		if(root == null){
			stringBuilder.append("$,");
			//System.out.print("$" + ",");
			return stringBuilder.toString();
		}
		//System.out.print(root.value + ",");
		stringBuilder.append(root.value +",");
		stringBuilder.append(Serialize(root.leftNode));
		stringBuilder.append(Serialize(root.rightNode));
		return stringBuilder.toString();
	}
	int point = -1;
	public BinaryTreeNode Deserialize(String str){//反序列化,将字节序列转化为对象
		point ++;
		if(point >= str.length()){
			return null;
		}
		BinaryTreeNode  node = null;
		String[] strArray = str.split(",");//以逗号分隔形成数组
		if(!strArray[point].equals("$")){
			node = new BinaryTreeNode();//二叉树的结点对象
			node.value = Integer.valueOf(strArray[point]);//将字符转化成value值
			node.leftNode = Deserialize(str);
			node.rightNode = Deserialize(str);
			System.out.print(node.value +",");
		}
		return node;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

二叉树的序列化

设计一个算法,序列化和反序列化一棵二叉树。 解释:序列化的意思是将内存中的一些特定的结构,变成有格式信息的字符串。如,对于链表而言,我们可以将1->2->3->NULL这样的链表序列化为"1,2...
  • weiwei22844
  • weiwei22844
  • 2014年12月18日 14:16
  • 1317

剑指offer(64):序列化二叉树

题目描述请实现两个函数,分别用来序列化和反序列化二叉树。
  • u011080472
  • u011080472
  • 2016年05月01日 16:23
  • 1687

二叉树4:二叉树的序列化和反序列化

二叉树4:二叉树的序列化和反序列化
  • qq_27703417
  • qq_27703417
  • 2017年05月02日 22:32
  • 640

剑指offer(C++)——序列化二叉树

题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 解释:序列化的意思是指将一些特定的数据结构,变成有格式信息的字符串。例如对一个链表,可以将1->2->3->4->NULL序列化为"1,...
  • YF_Li123
  • YF_Li123
  • 2017年04月19日 09:52
  • 460

序列化和反序列化二叉树(java版)

【题目描述】请实现两个函数,分别用来序列化和反序列化二叉树【解题思路1】 //1. 利用前序遍历序列化二叉树,然后从记录的字符串中反序列化二叉树。 //2. 遇到空节点需要用特殊字符加以标记。如“...
  • ouyangyanlan
  • ouyangyanlan
  • 2017年06月06日 11:15
  • 1915

剑指offer-----序列化和反序列化二叉树(java版)

一 题目 请实现两个函数,分别用来序列化和反序列化二叉树 二 思路 序列化二叉树时,根据前序遍历方式将二叉树节点的值转换为字符串,如果二叉树节点为空,则以‘#’代替,每个节点的值以‘...
  • sniperken
  • sniperken
  • 2016年12月27日 10:16
  • 1251

Python:序列化二叉树

牛客网上的剑指 offer的在线编程: 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 class TreeNode: def __init__(self, x...
  • Lynette_bb
  • Lynette_bb
  • 2017年07月14日 18:42
  • 266

序列化二叉树(二叉树的序列化和反序列化)

题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 # -*- coding:utf-8 -*- # class TreeNode: # def __init__...
  • You_are_my_dream
  • You_are_my_dream
  • 2017年01月28日 19:43
  • 602

二叉树的序列化和反序列化java借助队列实现

以先序遍历方式完成二叉树的序列化 public String serialize(TreeNode root){ if(root==null){ retu...
  • baidu_26439387
  • baidu_26439387
  • 2017年01月01日 22:39
  • 418

二叉树的序列化和反序列化实现(C++)

题目: 实现二叉树的序列化和反序列化的函数。 思路:         二叉树的序列化 即给定二叉树的头指针,按照某种遍历方式将所有结点链接为一个数组或字符串(/指针)。        ...
  • u013575812
  • u013575812
  • 2015年12月05日 14:39
  • 1245
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Q62:序列化二叉树
举报原因:
原因补充:

(最多只允许输入30个字)