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出来



京公网安备 11010502036488号