class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int> ans;
if(!root) return ans;
queue<TreeNode*> Qnode;
Qnode.push(root);
while (!Qnode.empty()){
int size = Qnode.size();
int layermax = INT_MIN;
while(size--){
TreeNode* node = Qnode.front();
Qnode.pop();
if(node->val>layermax) layermax=node->val;
if(node->left) Qnode.push(node->left);
if(node->right) Qnode.push(node->right);
}
ans.emplace_back(layermax);
}
return ans;
}
};
dfs (空间复杂度O(height))
class Solution {
public:
void dfs(vector<int>&res,TreeNode*node,int curHeight){
if(curHeight==res.size()) { //第一次遍历到curHeight,扩充res
res.push_back(node->val);
}else{
res[curHeight] = max(res[curHeight],node->val);
}
if(node->left){
dfs(res,node->left,curHeight+1);
}
if(node->right){
dfs(res,node->right,curHeight+1);
}
}
vector<int> largestValues(TreeNode* root) {
vector<int> res;
if(!root) return res;
dfs(res,root,0);
return res;
}
};