1. 程式人生 > 其它 >序列化和反序列化二叉樹

序列化和反序列化二叉樹

序列化採用前序遍歷二叉樹,返回一個帶有指標資訊的字串。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

type Codec struct {
    
}

func Constructor() (_ Codec) {
    return
}

// Serializes a tree to a single string.
func (this *Codec) serialize(root *TreeNode) string {
    sb := &strings.Builder{}
    var dfs func(*TreeNode)
    dfs = func(node *TreeNode) {
        if node == nil {
            sb.WriteString("null,")
            return
        }
        sb.WriteString(strconv.Itoa(node.Val))
        sb.WriteByte(',')
        dfs(node.Left)
        dfs(node.Right)
    }
    dfs(root)
    return sb.String()
}

// Deserializes your encoded data to tree.
func (this *Codec) deserialize(data string) *TreeNode {    
    sp:=strings.Split(data,",")
    var build func()*TreeNode
    build=func()*TreeNode{
        if sp[0]=="null"{
        sp=sp[1:]
        return nil
        }
        val,_:=strconv.Atoi(sp[0])
        sp=sp[1:]
        return &TreeNode{val,build(),build()}
    }
    
    return build()
}


/**
 * Your Codec object will be instantiated and called as such:
 * ser := Constructor();
 * deser := Constructor();
 * data := ser.serialize(root);
 * ans := deser.deserialize(data);
 */

  力扣第297題。