题解 | 序列化二叉树
序列化二叉树
https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
List<String> list = new ArrayList<>();
int mid;
int i = 0;
String []s1;
String []s2;
String Serialize(TreeNode root) {
perOrder(root);
midOrder(root);
return String.join(",",list);
}
TreeNode Deserialize(String str) {
if(str.isEmpty()||str == null){
return null;
}
String []s = str.split(",");
s1 = Arrays.copyOfRange(s,0,s.length/2);
s2 = Arrays.copyOfRange(s,s.length/2,s.length);
return order(s2,s1[i]);
}
void perOrder(TreeNode root){
if(root!=null){
list.add(root.val+"");
perOrder(root.left);
perOrder(root.right);
}
}
void midOrder(TreeNode root){
if(root!=null){
midOrder(root.left);
list.add(root.val+"");
midOrder(root.right);
}
}
TreeNode order(String []s,String val){
if(i>=s1.length-1){
i = 0;
}
if(s.length == 0){
i--;
return null;
}
if(s.length == 1){
return new TreeNode(Integer.valueOf(s[0]));
}
int mid = getIndex(s,val);
if(mid == -1){
return null;
}
TreeNode node1 = new TreeNode(Integer.valueOf(val));
TreeNode nodeLeft = order(Arrays.copyOfRange(s,0,mid),s1[++i]);
TreeNode nodeRight = order(Arrays.copyOfRange(s,mid+1,s.length),s1[++i]);
if(nodeLeft == null){
node1.left = order(Arrays.copyOfRange(s,0,mid),s1[++i]);
}else{
node1.left = nodeLeft;
}
if(nodeRight == null){
node1.right = order(Arrays.copyOfRange(s,mid+1,s.length),s1[++i]);
}else{
node1.right = nodeRight;
}
return node1;
}
int getIndex(String []s,String val){
for(int j = 0;j<s.length;j++){
if( s[j].equals(val)){
return j;
}
}
return -1;
}
}
查看18道真题和解析
vivo公司福利 364人发布