题解 | 序列化二叉树
序列化二叉树
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; } }