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]
.
void rightSideView(BinTree *root)
{
vector<int> vec;
deque<BinTree*> de;
if(root == NULL)
return ;
int curnum = 1;
int nexnum=0;
de.push_back(root);
BinTree* temp;
while(!de.empty())
{
while(curnum >0)
{
temp = de.front();
if(curnum ==1)
vec.push_back(temp->value);
de.pop_front();
curnum--;
if(temp->left != NULL)
{
de.push_back(temp->left);
nexnum++;
}
if(temp->right != NULL)
{
de.push_back(temp->right);
nexnum++;
}
}
curnum = nexnum;
nexnum=0;
}
for(int i=0;i<vec.size();i++)
cout<<vec[i]<<" ";
cout<<endl;
}