首先看一下问题描述
要求我们找到一个二叉树每一层的最大值
这个问题用BFS、DFS都可以解决,且不得不遍历整棵树。在遍历过程中,需要时刻记录当前节点的深度,以便比较同深度下的节点值以获取每一层的最大值
本题我采用了DFS算法,对于主干函数largestValues,通过操作:
通过explore函数对容器answer进行填满。对于容器answer,answer[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;
}