/* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
} */ import java.util.Arrays; import java.util.LinkedList; import java.util.List;
public class Solution { String Serialize(TreeNode root) { if(root == null) return "";
StringBuffer str = new StringBuffer();
pre_dis(root, str);//先序遍历的结果加到字符串上
str.append("+");
in_dis(root, str);//中序遍历的结果加到字符串上
return str.toString();
}
private void pre_dis(TreeNode root,StringBuffer s) {
if(root == null) return;
s.append(root.val + ",");
pre_dis(root.left,s);
pre_dis(root.right,s);
}
private void in_dis(TreeNode root,StringBuffer s) {
if(root == null) return;
in_dis(root.left,s);
s.append(root.val + ",");
in_dis(root.right,s);
}
TreeNode Deserialize(String str) {
if(str.equals("")) return null;
String[] split = str.split("\\+");
List<Integer> list1 = new LinkedList<>();//先序遍历的结果
List<Integer> list2 = new LinkedList<>();//中序遍历的结果
for (int i = 0; i < split.length; i++) {
String[] str1 = split[i].split(",");
if(i == 0) {
for(int j = 0;j < str1.length;j++) {
list1.add(Integer.parseInt(str1[j]));
}
}
if(i == 1) {
for(int j = 0;j < str1.length;j++) {
list2.add(Integer.parseInt(str1[j]));
}
}
}
//在变成数组
int[] arr1 = new int[list1.size()];
int[] arr2 = new int[list2.size()];
for(int i = 0;i < arr1.length;i++) {
arr1[i] = list1.get(i);
}
for(int i = 0;i < arr1.length;i++) {
arr2[i] = list2.get(i);
}
return reConstructBinaryTree(arr1, arr2);//然后用前面jz7咱们写好的函数就行了
}
public TreeNode reConstructBinaryTree(int [] pre,int [] vin) {
if(pre.length == 0) return null;
TreeNode root = new TreeNode(pre[0]);
int index = -1;
for(int i = 0;i < vin.length;i++) {
if(vin[i] == pre[0]) {
index = i;
}
}
int[] pre1 = Arrays.copyOfRange(pre, 1, index+1);
int[] pre2 = Arrays.copyOfRange(pre, index+1, pre.length);
int[] vin1 = Arrays.copyOfRange(vin, 0, index);
int[] vin2 = Arrays.copyOfRange(vin, index+1, vin.length);
root.left = reConstructBinaryTree(pre1, vin1);
root.right = reConstructBinaryTree(pre2, vin2);
return root;
}
}