1. 程式人生 > >演算法題(二十五):序列化/反序列化二叉樹

演算法題(二十五):序列化/反序列化二叉樹

題目描述

請實現兩個函式,分別用來序列化和反序列化二叉樹

分析

結點為空時用“#”代替,反序列化時,遇到“#”輸出null

程式碼

public class SerializeTree {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TreeNode root = new TreeNode(1);
		root.left = null;
		root.right = new TreeNode(2);
		root.right.left = new TreeNode(3);
		root.right.right = null;
		String str = serialize(root);
		System.out.println(str);
		TreeNode node = deSerialize(str);
		System.out.println(node);
	}
	
	public static String serialize(TreeNode root){
		StringBuilder sb = new StringBuilder();
		if(root == null){
			sb.append("#,");
			return sb.toString();
		}
		sb.append(root.value+",");
		sb.append(serialize(root.left));
		sb.append(serialize(root.right));
		return sb.toString();
	}
	
	public static int index = 0;
	public static TreeNode deSerialize(String str){
		String[] strs = str.split(",");
		if(strs[index].equals("#")){
			index++;
			return null;
		}
		TreeNode root = new TreeNode(Integer.parseInt(strs[index]));
		index++;
		root.left = deSerialize(str);
		root.right = deSerialize(str);
		return root;
	}

}