Problem:
You need to find the largest value in each row of a binary tree.
Example:
Input: 1 / \ 3 2 / \ \ 5 3 9 Output: [1, 3, 9]
解法分析:题目要求我们找出二叉树每一层的最大值,不难分析解此题的关键步骤为:
1. 跟踪二叉树的层数
2. 找出对应层数所有节点中的最大值
通过深度优先算法求解:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int> result;
findLargestValueEachLevel(root, 0, result);
return result;
}
void findLargestValueEachLevel(TreeNode* node, int level, vector<int>& num) {
if (node == NULL) return;
/*
当前层数与已保存的最大值个数作比较:若前者不小于后者,说明当前层常未往数组中加入值;
若前者小于后者,说明当前层已经找出一个值作为最大值加入到结果数组中,但这个值是不是
此层的最大值未可知,因此需要与同一层的其他值作比较,找到最大值时作替换即可
*/
if (level >= num.size()) {
num.push_back(node->val);
} else {
num[level] = max(node->val, num[level]);
}
findLargestValueEachLevel(node->left, level+1, num);
findLargestValueEachLevel(node->right, level+1, num);
}
};