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;
	}
}

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

《剑指offer》:[62]序列化二叉树

题目:请实现两个函数,分别来序列化和反序列化二叉树。  方案分析:我们知道通过二叉树的中序和任何一个前或者后续遍历都可以反序列化一棵二叉树,但是这样做有一个缺点就是,序列化的数据不能有重复的数据,否...
  • gogoky
  • gogoky
  • 2016年06月30日 10:12
  • 1039

剑指offer-面试题62:序列化二叉树

题目:请实现两个函数,分别用来序列化和反序列化二叉树。 思路:题目的要求似乎不是太清晰,实际上就是用序列来表示一棵二叉树,然后还可以根据这个序列重建二叉树。对于上图中的树,以前序遍历为例,先访问到...

剑指Offer面试题62:序列化二叉树

题目:序列化二叉树         请实现两个函数,分别用来序列化和反序列化二叉树。 算法分析:         通过分析解决前面的面试题6.我们知道可以从前序遍历和中序遍历构造...

剑指offer-面试题62-序列化二叉树

package case62_SerializeBinaryTrees; /** * 题目:请实现两个函数,分别用来序列化和反序列化二叉树。 * * 思路:根据前序遍历规则完成序列化与反序列...

【剑指Offer学习】【面试题62:序列化二叉树】

题目:请实现两个函数,分别用来序列化和反序列化二叉树。解题思路  通过分析解决前面的面试题6.我们知道可以从前序遍历和中序遍历构造出一棵二叉树。受此启发,我们可以先把一棵二叉树序列化成一个前序遍历序列...

剑指offer——面试题62:序列化二叉树

题目:请实现两个函数,分别用来序列化和反序列化二叉树     题目分析:能被这一题给坑死。首先,你得稍微解释下什么是序列化和反序列化吧,虽然我知道,但是很多人肯定不知道啊。还有,函数给的参数真心烦,明...

【剑指Offer】面试题62:序列化二叉树

整理自剑指Offer 一:题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二:解题思路 序列化二叉树:选择一种遍历方式,将二叉树的遍历结果保存在字符串中 反序列化二...

面试题62. 序列化二叉树

题目描述 请实现两个函数,分别用来序列化和反序列化二叉树。思路1: 序列化的方法是不唯一的,如下图,是通过bfs进行二叉树的序列化 bfs序列化二叉树的代码如下:import java.util...

剑指oofer 62 - 序列化二叉树

将二叉树序列化,前序遍历,NULL指针序列化成'$'字符,及诶单之间用',' 隔开。然后根据序列化结果反序列化出二叉树。 #include #include using namespace ...

剑指offer 面试题62 序列化和反序列化二叉树

剑指offer 面试题62 序列化和反序列化二叉树 题目: 请实现两个函数,分别用来序列化和反序列化二叉树。 package algorithm.ac.foroffer.top70;impo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Q62:序列化二叉树
举报原因:
原因补充:

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