package main
import ( 
	"strconv" 
    "strings" 
)

import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param root TreeNode类 
 * @return TreeNode类
*/
func Serialize( root *TreeNode ) string {
    // write code here7 …………
    // write code here7 …………
    if root==nil{
        return ""
    } 
    queue:=[]*TreeNode{root}
	lens:=1
	var ser string
	for len(queue)!=0 && lens!=0 {
		node:=queue[0]
		if node == nil{
			queue = queue[1:]
			ser+="#,"
			continue
		}else{
			ser+=strconv.Itoa(node.Val)+","
		}
		if node.Left!=nil{
			queue= append(queue, node.Left)
			lens=lens+1
		}else{
			queue=append(queue,nil)
		}
		if node.Right!=nil{
			queue=append(queue,node.Right)
			lens=lens+1
		}else{
			queue=append(queue,nil)
		}
		queue = queue[1:]
		lens=lens-1
	}  
    return ser[:len(ser)-1]
}
func Deserialize( s string ) *TreeNode {
   // write code here
	if len(s)==0{
		return nil
	}
	ptr:=1
	s1:=strings.Split(s,",") 
	v,_:=strconv.Atoi(string(s1[0]))
	head := &TreeNode{Val: v}
	queue:=[]*TreeNode{head}
    if len(s1)==1{
        return head
    }
	for len(queue)!=0 {
		node:=queue[0]
		if string(s1[ptr])!="#"{
			v,_=strconv.Atoi(s1[ptr])
			newnode:=&TreeNode{Val:v}
			node.Left=newnode
			queue= append(queue,newnode)
		}
		ptr++
		if ptr>=len(s1){
			return head
		}
		if string(s1[ptr])!="#"{
			v,_=strconv.Atoi(s1[ptr])
			newnode:=&TreeNode{Val:v}
			node.Right=newnode
			queue= append(queue,newnode)
		}
		ptr++
		if ptr>=len(s1){
			return head
		}
		queue=queue[1:]
	}
	return head
}

先用层序遍历遍历进数组里,然后再到这bfs出来