剑指offer(61)序列化二叉树

package java_jianzhioffer_algorithm;
/**
 * 题目:请实现两个函数,分别用来序列化和反序列化二叉树
 * @author hexiaoli
 * 思考:
 *    1)序列化,节点为空用“#,”表示,采用先序遍历
 *    2)反序列化,用字符串进行划分
 */
class TreeNodesd {
    int val = 0;
    TreeNodesd left = null;
    TreeNodesd right = null;
    public TreeNodesd(int val) {
        this.val = val;
    }
}
public class Serialize_Deserialize {
	
	public static String  serialize(TreeNodesd root) {
		StringBuilder sb = new StringBuilder();
		if(root ==null) {
			sb.append("#,");
			return sb.toString();
		}
        sb.append(root.val + ",");
        sb.append(serialize(root.left));
        sb.append(serialize(root.right));		
		return sb.toString();
	}
	static int index = -1;   //计数变量,递归方式
	public static TreeNodesd deserialize(String str) {
		index++;
		String[] strr =str.split(",");
		TreeNodesd node =null;
		if(!strr[index].equals("#")) {
			node = new TreeNodesd(Integer.valueOf(strr[index]));
			node.left=deserialize(str);
			node.right=deserialize(str);
		}
		return node;
	}
	public static void main(String[] args) {
		TreeNodesd root  = new TreeNodesd(1);
		TreeNodesd node1  = new TreeNodesd(2);
		TreeNodesd node2  = new TreeNodesd(3);
		TreeNodesd node3  = new TreeNodesd(4);
		TreeNodesd node4  = new TreeNodesd(5);
		root.left = node1;
		root.right=node2;
		node1.left=node3;
		node2.right=node4;
		
		String str ;
		str=serialize(root);
		
		System.out.println(str);
		TreeNodesd temp ;
		
		temp=deserialize(str);
		System.out.println(temp.val);

		
	}

}

猜你喜欢

转载自blog.csdn.net/hxl0925/article/details/90633404