层次,利用树数组来做,这个数组既用来遍历根节点,其次使用其连接左右节点
我只想到这样编码,解码那里想复杂了,感觉缺点什么,原来是缺点智商

/*
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];
  }
}