数据结构与算法之LeetCode-515. 在每个树行中找最大值(DFS,BFS)

72 篇文章 0 订阅
43 篇文章 0 订阅

515. 在每个树行中找最大值 - 力扣(LeetCode)

medium

513. 找树左下角的值 - 力扣(LeetCode)的延伸,同样是求层次的数据

DFS
  • 先序遍历,再深度遍历获取每一层的数值
var largestValues = function(root){
  if(!root){
    return []
  }
  
  const res = [];
  const levelOrder = (res,root,level) => {
    if(level === res.length){
      res.push(root.val);
    }else{
      res.splice(level,1,Math.max(res[level],root.val));
    }
    
    if(root.left){
      levelOrder(res,root.left,level+1);
    }
    
    if(root.right){
      levelOrder(res,root.right,level+1);
    }
  }
  
  levelOrder(res,root,0)
  return res;
}

执行结果:通过

执行用时:68 ms, 在所有 JavaScript 提交中击败了91.17%的用户

内存消耗:46.1 MB, 在所有 JavaScript 提交中击败了16.84%的用户

通过测试用例:78 / 78

/**
 * 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) {
    let levelMap = new Map();
    if(!root){
        return [];
    }

    let res =  [];
    const levelOrder = (root,level,res)=>{
        if(level === res.length){
            res.push(root.val)
        }else{
            res.splice(level,1,Math.max(res[level],root.val))
        }
        
        if(!root){
            return;
        }

        if(levelMap.size == level){
            levelMap.set(level,root.val)
        }else{
            let maxVal = Math.max(levelMap.get(level),root.val);
            levelMap.set(level,maxVal);
        }


        if(root.left){
            levelOrder(root.left,level+1,res)
        }

        if(root.right){
            levelOrder(root.right,level+1,res)
        }
    }

    levelOrder(root,0,res)
    //return res;
    return Array.from(levelMap.values())

};

执行结果:通过

执行用时:68 ms, 在所有 JavaScript 提交中击败了91.17%的用户

内存消耗:46 MB, 在所有 JavaScript 提交中击败了24.44%的用户

通过测试用例:78 / 78

BFS
var largestValues = (root) => {
  let levelMap = [];
  
  if(!root){
    return [];
  }
  
  let queue = [];
  
 	queue.push(root);
  while(queue.length){
    let size = queue.length;
    let curMax = -Infinity;
    
    for(let i=0;i<size;i++){
      let node = queue.shift();
      if(node.left){
        queue.push(node.left)
      }
      if(node.right){
        queue.push(node.right);
      }
      curMax = Math.max(curMax,node.val);
    }
    levelMap.push(curMax)
  }
  
  return levelMap;
}
var largestValues = function(root) {
    if (!root) {
        return [];
    }
    const res = [];
    const queue = [root];
    while (queue.length) {
        let len = queue.length;
        let maxVal = -Number.MAX_VALUE;
        while (len > 0) {
            len--;
            const t = queue.shift();
            maxVal = Math.max(maxVal, t.val);
            if (t.left) {
                queue.push(t.left);
            }
            if (t.right) {
                queue.push(t.right);
            }
        }
        res.push(maxVal);
    }
    return res;
};

执行结果:通过

执行用时:72 ms, 在所有 JavaScript 提交中击败了79.26%的用户

内存消耗:45.8 MB, 在所有 JavaScript 提交中击败了43.84%的用户

通过测试用例:78 / 78

参考链接

515. 在每个树行中找最大值 - 力扣(LeetCode)

在每个树行中找最大值 - 在每个树行中找最大值 - 力扣(LeetCode)

【宫水三叶】树的搜索运用题 - 在每个树行中找最大值 - 力扣(LeetCode)

在每个树行中找最大值【BFS和DFS】 - 在每个树行中找最大值 - 力扣(LeetCode)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值