Hi,又见面了~第二天,难度和之前差不多。
515. Find Largest Value in Each Tree Row
一.犯的错误
(1)逻辑上的问题都是在调试中发现的,比如这题在没加最后一句push_back的时候,发现输出只有2层的输出,最后一层没输出。然后才发现是最后一个if没走到,所以加了一个push_back
二。 初始max的赋值我naive的认为初始化-1000000够小了,然而输入数据给的竟然是-几十亿。。。所以逻辑理清,max初始赋值为根节点就好啦~其实是比较简单的问题,可以发现~
三. 代码如下
/** * 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; queue <TreeNode *> q; queue <int> qlevel; TreeNode * temp; int i,level; q.push(root); qlevel.push(0); int m=0; int max; if(!root) //最后有个空输入,所以判断一下否则过不去 return result; max=root->val; //果然厉害~输入数据是负几十亿。。 我当时初始化max为-100000,naive while(q.size()) { temp = q.front(); q.pop(); level = qlevel.front(); qlevel.pop(); //cout<<temp->val<<level<<endl; if(temp->left) { q.push(temp->left); qlevel.push(level+1); } if(temp->right) { q.push(temp->right); qlevel.push(level+1); } if(level==m) { if(temp->val>max) { max = temp->val; } } if(level>m) { m = level; result.push_back(max); max = temp->val;//这里max重新赋值为新一层的第一个节点的值 } } result.push_back(max);//因为在处理最后一个锇元素后退出,没有到达最后一个if,也就是max值没有更新到result中 //于是最后再加一个push_back return result; } };