层次遍历

39 阅读1分钟

以上代码和内容都是参考掘金小册子:的前端算法和数据结面试:底层逻辑解读与大厂真题训练 题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点

示例: 二叉树:[3,9,20,null,null,15,7],

1723972364120.jpg

 const root = {
            val: "A",
            left: {
                val: "B",
                left: {
                    val: "D"
                },
                right: {
                    val: "E"
                }
            },
            right: {
                val: "C",
                right: {
                    val: "F"
                }
            }
        };
 const levelOrder = (root) => {
            const queue = [], res = [];
            if (!root) return;
            queue.push(root); // 根节点入队
            while (queue.length) {
                const level = []; // 每一层的节点
                // 缓存刚进入循环时的队列长度,这一步很关键,因为队列长度后面会发生改变
                const len = queue.length; // 当前层的节点个数
                // 循环遍历当前层级的结点,这样就可以拿到每一个层级的数据,然后将当前的子节点进入到栈中,不得不说这个for循环很棒
                for (let i = 0; i < len; i++) {
                    const cur = queue.shift(); // 弹出每一层节点数据
                    level.push(cur.val);
                    if (cur.left) {
                        queue.push(cur.left);  // 每一层的左节点入栈
                    }
                    if (cur.right) {
                        queue.push(cur.right); // 每一层的右节点入栈
                    }
                }
                // 把每一层的结果数组存放到总的结果数组中
                res.push(level)
            }
            return res;
        }
        const result = levelOrder(root)
        console.log(result, '结果数组返回')