BFS层序遍历。建立两个queue,不断更新,得到逐层结果。也有人只是建立一个queue,但是开辟了一个新的queue存储层数,方法一样,不过更加节省空间。
queue只能用swap的方式清空。
int的最小值时-2147483648。
/**
* 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;
if(root==NULL)
return result;
else
{
queue<TreeNode*> preDepthNums;
queue<TreeNode*> nowDepthNums;
preDepthNums.push(root);//1
result.push_back(root->val);
while(1)
{
int max=-2147483648;
while(!preDepthNums.empty())
{
if(preDepthNums.front()->left!=NULL)
{
nowDepthNums.push(preDepthNums.front()->left);
if(max<nowDepthNums.back()->val)
max=nowDepthNums.back()->val;
}
if(preDepthNums.front()->right!=NULL)
{
nowDepthNums.push(preDepthNums.front()->right);
if(max<nowDepthNums.back()->val)
max=nowDepthNums.back()->val;
}
preDepthNums.pop();//2
}
if(nowDepthNums.empty())
break;
else
{
result.push_back(max);
preDepthNums.swap(nowDepthNums);
queue<TreeNode*> emptyQueue;
nowDepthNums.swap(emptyQueue);
}
}
return result;
}
}
};