Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
For example:
Given the following binary tree,
1 <--- / \ 2 3 <--- \ \ 5 4 <---
You should return [1, 3, 4]
.
用两个队列层次遍历二叉树每层的数值,并且将每层最右边的数放入最后的结果中。
vector<int> rightSideView(TreeNode* root) {
//其实是层次遍历树并且获得每层最右边的数的过程
vector<int> result;
if(root == NULL) return result;
queue<TreeNode*> queue1;
queue<TreeNode*> queue2;
queue1.push(root);
int flag = 1;//表示这时候看queue里面的个数看层次
while(!queue1.empty()||!queue2.empty())
{
if(!queue1.empty()&&flag)
{
if(queue1.size()==1)
{
result.push_back(queue1.front()->val);
flag = 0 ;
}
if(queue1.front()->left != NULL)
queue2.push(queue1.front()->left);
if(queue1.front()->right != NULL)
queue2.push(queue1.front()->right);
queue1.pop();
}
if(!queue2.empty()&&!flag)
{
if(queue2.size()==1)
{
result.push_back(queue2.front()->val);
flag = 1;
}
if(queue2.front()->left != NULL)
queue1.push(queue2.front()->left);
if(queue2.front()->right != NULL)
queue1.push(queue2.front()->right);
queue2.pop();
}
}
//printVector(result);
return result;
}