老套路超时:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int> result;
queue<TreeNode*> que;
if(root != NULL) que.push(root);
while(!que.empty()){
int size = que.size(); //行元素个数
int maxVal = INT_MIN; // 最大值初始化为0
for(int i=0;i<size;i++){
TreeNode* node = que.front();
que.pop();
maxVal = max(node->val,maxVal);
if(root->left) que.push(root->left);
if(root->right) que.push(root->right);
}
result.push_back(maxVal);
}
return result;
}
};
解题思路 DFS
- 利用深度有限搜索算法。
- vector类的size()函数返回该容器对象当前存储的元素个数。
- 当结果数组的size和二叉树的层数相同时,替换数据,使结果数组内数据值最大。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> result;
//深度优先搜索
void dfs(TreeNode*p,int h){ //根节点 h=1
if(p==NULL)return;
//vector类的size()函数返回该容器对象当前存储的元素个数。
if(result.size()<h)result.push_back(p->val); //已放根节点值size=1,
else result[h-1]=max(result[h-1],p->val);
dfs(p->left,h+1); //查找左子树
dfs(p->right,h+1); //查找右子树
}
vector<int> largestValues(TreeNode* root) {
if(root==NULL)return result;
result.push_back(root->val); //根节点直接存入结果
dfs(root,1);
return result;
}
};
执行用时:8 ms, 在所有 C++ 提交中击败了87.74%的用户
内存消耗:21.5 MB, 在所有 C++ 提交中击败了91.19%的用户
通过测试用例:78 / 78