LeetCode算法问题17 —— Find Largest Value in Each Tree Row

本文介绍了一种使用深度优先搜索(DFS)算法来找出二叉树中每一层最大值的方法。通过递归地遍历树的节点并记录每个深度的最大值,最终形成一个包含各层最大值的列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看一下问题描述

这里写图片描述

要求我们找到一个二叉树每一层的最大值

这个问题用BFS、DFS都可以解决,且不得不遍历整棵树。在遍历过程中,需要时刻记录当前节点的深度,以便比较同深度下的节点值以获取每一层的最大值

本题我采用了DFS算法,对于主干函数largestValues,通过操作:

这里写图片描述

通过explore函数对容器answer进行填满。对于容器answeranswer[i]表示深度为i的一层(起始深度为0)的最大值。

对于explore函数

void explore(TreeNode* node, int depth, vector<int>& valueOfEachRow){}

参数有各自的定义:

  • node:当前遍历到的节点
  • depth:该节点在树中的深度
  • valueOfEachRow:用于记录每层最大值的容器

以此可通过DFS完成对每层最大值的提取。

具体代码如下:

void explore(TreeNode* node, int depth, vector<int>& valueOfEachRow) {
    if (node == NULL)
        return;
    if (valueOfEachRow.size() <= depth) {
        valueOfEachRow.push_back(node->val);
    } else {
        if (valueOfEachRow[depth] < node->val)
            valueOfEachRow[depth] = node->val;
    }
    explore(node->left, depth + 1, valueOfEachRow);
    explore(node->right, depth + 1, valueOfEachRow);
}

vector<int> largestValues(TreeNode* root) {
    vector<int> answer;
    explore(root, 0, answer);
    return answer;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值