ID:102.二叉树的层序遍历

51 阅读1分钟

考点:二叉树层序遍历

题目链接

题目

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

思路

参考题解,由于结果需要将每一层的节点值单独放在一个数组中,所以在出队入队之外还需要判断当前队列元素的层级。

var levelOrder = function(root) {
    if(!root) return [];
    const queue = [root]; // 队列
    const res = [[root.val]]; // 结果数组
    let cur = 1; // 当前层级(因为0层是root所以从1开始)
    while(queue.length !== 0) {
        res.push([]); // 预留当前层级的结果数组
        const n = queue.length; // 保存当前队列长度,这代表着某层节点数量
        // 遍历这个数量的节点,将节点值保存到结果数组中
        for(let i = 0; i < n; i++) {
            const node = queue.shift(); // 当前层元素逐渐出队
            // 如果有左节点,则入队,同时将这个值计入结果中
            // 右节点同理
            if(node.left) {
                queue.push(node.left);
                res[cur].push(node.left.val);
            }
            if(node.right) {
                queue.push(node.right);
                res[cur].push(node.right.val);
            }
        }
        层级自增
        cur++;
    }
    // 最后会多一个空的数组,弹出去
    res.pop();
    return res;
};