# 二叉树的右视图

<p>给定一个二叉树的 <strong>根节点</strong> <code>root</code>，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。</p>

<p> </p>

<p><strong>示例 1:</strong></p>

<p><img src="https://img-service.csdnimg.cn/img_convert/d8e254ac37a1738da124338966297a76.jpeg" style="width: 270px; " /></p>

<pre>
<strong>输入:</strong> [1,2,3,null,5,null,4]
<strong>输出:</strong> [1,3,4]
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong> [1,null,3]
<strong>输出:</strong> [1,3]
</pre>

<p><strong>示例 3:</strong></p>

<pre>
<strong>输入:</strong> []
<strong>输出:</strong> []
</pre>

<p> </p>

<p><strong>提示:</strong></p>

<ul>
	<li>二叉树的节点个数的范围是 <code>[0,100]</code></li>
	<li><meta charset="UTF-8" /><code>-100 <= Node.val <= 100</code> </li>
</ul>


## template

```cpp
#include <bits/stdc++.h>
using namespace std;

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution
{
public:
    vector<int> rightSideView(TreeNode *root)
    {

        vector<int> ret;
        queue<TreeNode *> queues[2];

        if (root != NULL)
            queues[0].push(root);

        int i = 0, j = 1, tmp;
        TreeNode *p;
        while (!queues[0].empty() || !queues[1].empty())
        {
            while (!queues[i].empty())
            {
                p = queues[i].front();
                queues[i].pop();
                if (p->left)
                    queues[j].push(p->left);
                if (p->right)
                    queues[j].push(p->right);
                tmp = p->val;
            }

            ret.push_back(tmp);
            i = (i + 1) % 2;
            j = (j + 1) % 2;
        }

        return ret;
    }
};

```

## 答案

```cpp

```

## 选项

### A

```cpp

```

### B

```cpp

```

### C

```cpp

```