您的位置:首页 > 产品设计 > UI/UE

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

2018-01-16 16:10 555 查看
首先看一下问题描述



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

这个问题用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: