题目来源:leetcode
199. 二叉树的右视图
层次遍历用队列,但是如何记录层次是一个需要思考的地方。一种方法是提供两个变量记录本层节点数和下层节点数,还有一种很巧妙的方法,记录队列中元素的数量,就是当前层次节点数。
题解:
这道题思路是使用层次遍历,每层最右边一个节点就是右视图的一部分。如果求左视图,就取每层最左边的节点。
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
if(root==nullptr) return vector<int>{};
vector<int>ans;//记录答案
queue<TreeNode*>q;//队列用于层次遍历
q.push(root);
while(!q.empty())
{
int size = q.size();//当前层节点的个数!
ans.push_back(q.front()->val);//看下面的进队顺序,队列最前面的就是本层最右的元素
while(size--)//遍历当前层的元素!
{
TreeNode* temp=q.front();
q.pop();
if(temp->right) q.push(temp->right);//进队语句交换,可以实现 左视图
if(temp->left) q.push(temp->left);
}
}
return ans;
}
};
参考:@淹死在水里的鱼 https://leetcode-cn.com/problems/binary-tree-right-side-view/comments/