算法-树的层序遍历

关于树的的算法常见的解决方式是递归和迭代,掌握了层序遍历,就能解决很多树算法问题了,比如右侧树、每层最大之类,也很好理解,分享一道在每个树行中找最大值

/*
 * @lc app=leetcode.cn id=515 lang=javascript
 *
 * [515] 在每个树行中找最大值
 */

// @lc code=start
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var largestValues = function(root) {
    if(!root) return []
    let arr = [root],res=[],max=-Infinity;
    while(arr.length>0){//通过队列遍历每一层节点
        let len = arr.length//存储每层的节点个数
        for(let i=0;i<len;i++){//for循环控制当前层节点执行完执行下一层
            let item = arr.shift();
            max = Math.max(max,item.val)
            if(item.left) arr.push(item.left)
            if(item.right) arr.push(item.right)
        }
        res.push(max)
        max=-Infinity
    }
    return res
};
// @lc code=end


复制代码
分类:
前端
标签: