这题比较简单,层序遍历,每次把这层的最后一个放进列表就可以。
原题传送门
【题目描述】
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
【示例】
【解题过程】
【思路】
层序遍历,每次把这层的最后一个放进列表。
【代码】
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> ans;
//层序遍历,把每一层最后一个结点添加到列表里就可以了
if(root==nullptr){
return ans;
}
else if((root->left)==nullptr &&(root->right)==nullptr){
ans.push_back(root->val);
return ans;
}
queue<TreeNode*> que;
que.push(root);
int len=1;
while(!(que.empty())){
len=que.size();
for(int i=0;i<len;i++){
TreeNode* temp=que.front();
que.pop();
if((temp->left)!=nullptr){
que.push(temp->left);
}
if((temp->right)!=nullptr){
que.push(temp->right);
}
if(i==len-1){
ans.push_back(temp->val);
}
}
}
return ans;
}
};