美文网首页
二叉树深度&广度遍历

二叉树深度&广度遍历

作者: RichardBillion | 来源:发表于2019-12-16 11:04 被阅读0次

二叉树的数据结构在js中可以如此表示:

const tree = {
    value: 1,
    left: {
        value: 2,
        left: {
            value: 4,
            left: {
                value: 8
            },
            right: {
                value: 9
            }
        },
        right: {
            value: 5
        }
    },
    right: {
        value: 3,
        left: {
            value: 6
        },
        right: {
            value: 7
        }
    }
}

我们分别采用深度和广度遍历一遍:

深度优先

此处就使用前序遍历了

递归实现

function dfsRecursion(tree) {
    let res = [];
    function dfs(node){
        if(node) {
            res.push(node.value);
            dfs(node.left);
            dfs(node.right);
        }
    }
    dfs(tree);
    return res;
}

非递归实现

/**
 * @param tree 
 * 非递归实现,需要自行实现“回溯”,可以使用栈来巧妙实现
 * 将某个节点的右节点、左节点依次压倒栈中,会先消费该左节点,再次将其右子节点、左子节点压入栈...
 */
function dfsNonRecursion(tree) {
    let arr = [];
    let res = [];
    arr.push(tree);
    while (arr.length) {
        const node = arr.pop();
        res.push(node.value);
        if (node.right) {
            arr.push(node.right);
        }
        if (node.left) {
            arr.push(node.left);
        }
    }
    return res
}

广度优先

function bfs(tree) {
    let res = [];
    let arr = [];
    arr.push(tree);
    while(arr.length) {
        const node = arr.shift();
        res.push(node.value);
        if(node.left) {
            arr.push(node.left);
        }
        if(node.right) {
            arr.push(node.right);
        }
    }
    return res;
}

相关文章

  • JS实现二叉树的遍历(DFS、BFS、前中后序遍历)

    对于二叉树,有深度遍历(DFS)和广度遍历(BFS),深度遍历有前序遍历、中序遍历和后序遍历三种方法,广度遍历也叫...

  • 二叉树遍历

    二叉树的遍历,分为深度优先遍历和广度优先遍历,其中深度优先遍历又分为有前序、中序、后序遍历,广度优先遍历就是按层遍...

  • 5. 深度优先、广度优先

    1. 二叉树的深度优先遍历和广度优先遍历2. 深度优先搜索递归和非递归实现 深度优先(DFS):前序遍历 广度优先...

  • GO学习笔记(6) - 二叉树构建与遍历

    目录 二叉树介绍 广度优先遍历创建二叉树广度遍历 深度优先遍历先、中、后序遍历利用函数编程得到节点总数利用chan...

  • 二叉树遍历

    二叉树遍历可以分为广度遍历和深度遍历,深度遍历又可以分为前序遍历、后序遍历、中序遍历。对于一个二叉树,如下图: 广...

  • 二叉树遍历

    总结一下二叉树的深度遍历(DFS)和广度遍历(BFS)首先, 创建二叉树的节点: 一、深度遍历 1.1 先序遍历(...

  • 二叉树

    深度优先遍历 递归 DFS 广度优先遍历 递归BFS 二叉树的最大最小深度 判断二叉树是否中轴对称

  • 二叉树遍历

    二叉树的遍历分为深度优先遍历(Depth First Traversal)和广度优先遍历(Breath First...

  • 总结

    1、二叉树广度遍历(非递归) 广度遍历非递归实现需要依靠一个队列。 2、二叉树深度遍历(递归与非递归,前序,中序和...

  • Python实现深度优先与广度优先

    二叉树的两种遍历是数据结构的经典考察题目, 广度遍历考察队列结构, 深度遍历考察递归 二叉树 深度优先 先序遍历(...

网友评论

      本文标题:二叉树深度&广度遍历

      本文链接:https://www.haomeiwen.com/subject/peyhnctx.html