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

首先看一下问题描述

这里写图片描述

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

这个问题用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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值