【题目】
* 请实现两个函数,分别用来序列化和反序列化二叉树
* 1
/ \
2 3
/\ /\
4 5 6 7
*
* 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。
* 而反序列化的结果则是输出一棵二叉树。
1 package com.exe7.offer; 2 3 /** 4 * 请实现两个函数,分别用来序列化和反序列化二叉树 5 * 1 6 / 7 2 3 8 /\ / 9 4 5 6 7 10 * 11 * 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。 12 * 而反序列化的结果则是输出一棵二叉树。 13 * @author WGS 14 * 15 */ 16 public class SerializeBiTree { 17 static class TreeNode{ 18 int val=0; 19 TreeNode left=null; 20 TreeNode right=null; 21 TreeNode next=null; 22 public TreeNode(int val){ 23 this.val=val; 24 } 25 } 26 27 //序列化 前序 28 public String serialize(TreeNode pRoot){ 29 30 StringBuilder sb=new StringBuilder(); 31 if(pRoot==null){ 32 sb.append("#,"); 33 return sb.toString(); 34 } 35 sb.append(pRoot.val+","); 36 sb.append(serialize(pRoot.left)); 37 sb.append(serialize(pRoot.right)); 38 return sb.toString(); 39 40 } 41 //反序列化 相当于创建二叉树的过程 42 int p=-1; 43 public TreeNode deSerialize(String strIn){ 44 p++; 45 if(p>strIn.length()) 46 return null; 47 String[] strArr=strIn.split(","); 48 TreeNode node=null; 49 if(!strArr[p].equals("#")){ 50 node=new TreeNode(Integer.valueOf(strArr[p])); 51 node.left=deSerialize(strIn); 52 node.right=deSerialize(strIn); 53 } 54 return node; 55 56 } 57 public void preOrder(TreeNode node){ 58 if(node==null) return; 59 System.out.print(node.val+" "); 60 preOrder(node.left); 61 preOrder(node.right); 62 } 63 public static void main(String[] args) { 64 SerializeBiTree s=new SerializeBiTree(); 65 66 //反序列化 67 String strIn=("1,2,#,#,3,4,#,7,#,#,5,#,#,"); 68 TreeNode tempNode=s.deSerialize(strIn); 69 s.preOrder(tempNode);//前序遍历 70 71 System.out.println("------------------------"); 72 //序列化 结果: 1,2,4,#,#,5,#,#,3,6,#,#,7,#,#, 73 /* 74 1 75 / 76 2 3 77 /\ /78 4 5 6 7 79 * */ 80 TreeNode root=new TreeNode(1); 81 TreeNode node1=new TreeNode(2); 82 TreeNode node2=new TreeNode(3); 83 TreeNode node3=new TreeNode(4); 84 TreeNode node4=new TreeNode(5); 85 TreeNode node5=new TreeNode(6); 86 TreeNode node6=new TreeNode(7); 87 root.left=node1;//2 88 root.right=node2;//3 89 node1.left=node3;//4 90 node1.right=node4;//5 91 node2.left=node5;//6 92 node2.right=node6;//7 93 94 String str=s.serialize(root); 95 System.out.println(str); 96 } 97 98 }
时间: 2024-10-27 12:36:35