欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

树:二叉树的层序遍历

程序员文章站 2024-03-22 18:47:40
...

树:二叉树的层序遍历

//      1
//     / \
//    2   3
//   /   / \
//  4   5   6
//     / \
//    7   8
var tree = {
    value: 1,
    left: {
        value: 2,
        left: {
            value: 4
        }
    },
    right: {
        value: 3,
        left: {
            value: 5,
            left: {
                value: 7
            },
            right: {
                value: 8
            }
        },
        right: {
            value: 6
        }
    }
}

思路:我们定义一个数组 queue 来存储每一层的节点,初始先把根节点放进去。
// 当 queue 长度大于 0 的时候,定义一个数组 arr 来存储每一层的节点值。
// 同时把每个节点的左右节点添加到数组 queue 中去。

如果本题想要的输出是:[ [ 1 ], [ 2, 3 ], [ 4, 5, 6 ], [ 7, 8 ] ],则代码如下:

function levelOrder(root){
    if(!root) return []
    let res=[];//最终结果
    let queue=[root];//初始将根节点放入队列
    while(queue.length>0){
        let arr=[];
        let len=queue.length;
        while(len--){
            const node=queue.shift();
            arr.push(node.value);
            if(node.left) queue.push(node.left);
            if(node.right) queue.push(node.right);
        }
        res.push(arr)
    }
    return res;
}

如果本题想要的结果是[1, 2, 3, 4,5, 6, 7, 8],则代码是:

function levelOrder(root){
    if(!root) return []
    let res=[];//最终结果
    let queue=[root];//初始将根节点放入队列
    while(queue.length>0){
        const node=queue.shift();
        if(node.left) queue.push(node.left);
        if(node.right) queue.push(node.right);
        res.push(node.value);
    }
    return res;
}

console.log(levelOrder(tree))
相关标签: