BFS,序列化二叉树

180 阅读1分钟

背景

这个题非常不错,自己解决的,把他记录下来

剑指 Offer 37. 序列化二叉树

剑指 Offer 37. 序列化二叉树

用的BFS的方法解决的这个问题,主要是使用的队列

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */

/**
 * Encodes a tree to a single string.
 *
 * @param {TreeNode} root
 * @return {string}
 */
var serialize = function(root) {
    if (!root) return JSON.stringify([]);
    
    let res = [];
    let queue = [root];
    while (queue.length) {
        let node = queue.shift();

        if (node !== null) {
            res.push(node.val);
            queue.push(node.left);
            queue.push(node.right);
        } else {
            res.push(null)
        }

    }

    return JSON.stringify(res);
};

/**
 * Decodes your encoded data to tree.
 *
 * @param {string} data
 * @return {TreeNode}
 */
var deserialize = function(data) {
    if (data === '[]') return null;
    let arr = JSON.parse(data);

    let root = new TreeNode(arr[0]);
    let queue = [root];

    let i = 1;

    while (queue.length){
        let node = queue.shift();

        if (arr[i] !== null) {
            node.left = new TreeNode(arr[i]);
            queue.push(node.left);
        }
        i++;

        if (arr[i] !== null) {
            node.right = new TreeNode(arr[i]);
            queue.push(node.right);
        }
        i++;
    }

    return root;

};

/**
 * Your functions will be called as such:
 * deserialize(serialize(root));
 */