二叉树不能单独根据前序遍历序列来恢复,只有通过前序+中序或者后序+中序才可以唯一确定一棵二叉树。
但是如果记录下了null结点的值,就可以直接根据前序遍历来恢复二叉树
public class Codec {
//先序遍历序列化二叉树(记录下null结点为
public String serialize(TreeNode root) {
StringBuilder ans = new StringBuilder();
dfs(root, ans);
return ans.toString();
}
private void dfs(TreeNode root, StringBuilder sb) {
if (root == null) {
sb.append("#,");
return;
}
sb.append(root.val).append(",");
dfs(root.left, sb);
dfs(root.right, sb);
}
public TreeNode deserialize(String data) {
String[] arr = data.split(",");
List<String> list = new LinkedList<>(Arrays.asList(arr));
return dfs2(list);
}
private TreeNode dfs2(List<String> list) {
if ("#".equals(list.get(0))) {
list.remove(0);
return null;
}
TreeNode root = new TreeNode(Integer.parseInt(list.get(0)));
list.remove(0);
root.left = dfs2(list);
root.right = dfs2(list);
return root;
}
}