层次,利用树数组来做,这个数组既用来遍历根节点,其次使用其连接左右节点
我只想到这样编码,解码那里想复杂了,感觉缺点什么,原来是缺点智商
/* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.LinkedList; import java.util.Queue; public class Solution { String Serialize(TreeNode root) { StringBuilder sb = new StringBuilder(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); if(root==null) { return "#,"; } queue.add(root); while(!queue.isEmpty()) { TreeNode node = queue.poll(); if(node!=null) { queue.offer(node.left); queue.offer(node.right); sb.append(node.val + ","); }else { sb.append("#"+","); } } if(sb.length() != 0) sb.deleteCharAt(sb.length()-1); return sb.toString(); } TreeNode Deserialize(String str) {//解码部分,居然利用的树数组来做,可以 TreeNode head = null; if(str == null || str.length() == 0)//特判 return head; String[] nodes = str.split(","); TreeNode[] treeNodes = new TreeNode[nodes.length]; for(int i=0; i<nodes.length; i++){ if(!nodes[i].equals("#")) treeNodes[i] = new TreeNode(Integer.valueOf(nodes[i])); } for(int i=0, j=1; j<treeNodes.length; i++){ if(treeNodes[i] != null){//如果空的话 treeNodes[i].left = treeNodes[j++];//用i记录当前的位置, treeNodes[i].right = treeNodes[j++];//用j记录需要滑动的位置。 } } return treeNodes[0]; } }