当我们看一棵树或者一栋建筑物的时候,总是会看到这一层最外侧的样子。二叉树的右视图也是如此,我们从右观察二叉树时,只能看到其每一层的最右侧元素。
因此,使用广度优先搜索对二叉树层序遍历。当走到这一层的最右侧时,在结果的容器中添加这个元素的值。
循环开始前的栈保存了下一层的所有节点。首先通过栈长知道循环的终止点在哪,并且提示我们将其值放入容器。通过从左到右遍历该层的所有节点,并将它们的子节点入栈,这样就生成了下一层的节点值。
栈空时就代表二叉树的所有节点都被遍历了。
class Solution {
public:
vector<int> res;
vector<int> rightSideView(TreeNode* root) {
if (!root)return res;
queue<TreeNode*> que;
que.push(root);
TreeNode *curNode;
while (!que.empty())
{
int queSize = que.size();
while (queSize--)
{
curNode = que.front();
que.pop();
if (curNode->left)que.push(curNode->left);
if (curNode->right)que.push(curNode->right);
}
res.push_back(curNode->val);
}
return res;
}
};