您的位置:首页 > Web前端

剑指Offer_61_序列化二叉树

2016-09-01 10:06 302 查看

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树

解题思路

使用前序遍历,将遇到的结点添加到字符串中,遇到null则将一个#添加要序列化字符串中。反序列化时,每次读取根结点,然后读取其左结点,遇到#(null)时,返回上层。

实现

/*树结点定义*/
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;

}

}
/*实现*/
public class Solution {
String Serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
serialize(root, sb);
return sb.toString();
}

private void serialize(TreeNode root, StringBuilder sb) {
if (root == null) {
sb.append("#,");
return;
}

sb.append(root.val + ",");
serialize(root.left, sb);
serialize(root.right, sb);
}

private class Result{
TreeNode node;
int pos;

Result(TreeNode node, int pos){
this.node = node;
this.pos = pos;
}
}

TreeNode Deserialize(String str) {
if (str == null || str.length() <= 0) return null;
String[] strs = str.split(",");
Result re = deserialize(strs, 0);
return re.node;
}

private Result deserialize(String[] str, int i) {
TreeNode root = null;
if (i < str.length - 1){
if ("#".equals(str[i])) return new Result(null, i+1);
root = new TreeNode(Integer.parseInt(str[i]));
Result l = deserialize(str, i + 1);
root.left = l.node;
Result r = deserialize(str, l.pos);
root.right = r.node;
return new Result(root, r.pos);
}
return new Result(root, i+1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 序列化 Java