您需要在二叉树的每一行中找到最大的值。
示例:
输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9]
基本思路:二叉树的层序遍历而已。用两个数组交替记录每次遍历的结果,并将其最大值保存至结果中。
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int> Res;
int Max = INT_MIN;
if (root == NULL) return Res;
vector<TreeNode*> First,Second;
First.push_back(root);
Res.push_back(root->val);
while (First.size() != 0 || Second.size() != 0) {
// 第一行
for (TreeNode* TN : First) {
if (TN->left != NULL) {
Second.push_back(TN->left);
Max = max(Max, TN->left->val);
}
if (TN->right != NULL) {
Second.push_back(TN->right);
Max = max(Max, TN->right->val);
}
}
if (Second.size() != 0) {
Res.push_back(Max);
}
First.clear();
Max = INT_MIN;
// 第二行
for (TreeNode* TN : Second) {
if (TN->left != NULL) {
First.push_back(TN->left);
Max = max(Max, TN->left->val);
}
if (TN->right != NULL) {
First.push_back(TN->right);
Max = max(Max, TN->right->val);
}
}
if (First.size() != 0) {
Res.push_back(Max);
}
Second.clear();
Max = INT_MIN;
}
return Res;
}
};