算法挑战17: 二叉树的层序遍历

3 阅读1分钟

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

思路: 和BFS不同之处在于,BFS返回的是一个一维数组,层序遍历的结果是一个二维数组,每个元素是一个数组, 每一层的节点在同一个元素中,

我们维护一个cur数组和一个next数组,还有一个vals数组(存储每一层的数组)和一个answer数组(二维数组,存储结果)

var levelOrder = function (root) {
    if (!root) return [];
    let cur = [root];//先把root存cur中
    let answer = [];//答案

    while (cur.length !== 0) {//最后一层的子树肯定是null,当cur = next = null时,结束遍历
    //在内部声明,可简化置空操作
        let next = [];
        let vals = [];
        //迭代遍历cur数组
        for(const c of cur){
            vals.push(c.val);//本层的值存入vals数组
            //把下一层节点放入next数组中
            if(c.left){
                next.push(c.left);
            }
            if(c.right){
                next.push(c.right);
            }
        }
        //进行下一轮
        cur = next;
        //添加答案
        answer.push(vals)
    }
    return answer;
};