题目描述:
您需要在二叉树的每一行中找到最大的值。
示例:
输入:
1
/ \
3 2
/ \ \
5 3 9
输出: [1, 3, 9]
代码:
方法一、层次遍历(利用队列)解法
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int>res;
if(root==NULL)return res;
queue<TreeNode *>q;
q.push(root);
while(!q.empty()){
queue<TreeNode *>qt;
int max=q.front()->val;
while(!q.empty()){
TreeNode *t=q.front();q.pop();
if(t->val>max)max=t->val;
if(t->left)qt.push(t->left);
if(t->right)qt.push(t->right);
}
q=qt;
res.push_back(max);
}
return res;
}
};
方法二、递归解法
class Solution {
public:
vector<int> largestValues(TreeNode* root) {
vector<int> res;
lVhelp(root,res,0);
return res;
}
void lVhelp(TreeNode *r,vector<int> &res,int depth){
if(r==NULL) return;
if(depth+1>res.size()) res.push_back(0x80000000);
res[depth]=max(r->val,res[depth]);
lVhelp(r->left,res,depth+1);
lVhelp(r->right,res,depth+1);
}
};