给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4] 输出: [1,3,4]
示例 2:
输入: [1,null,3] 输出: [1,3]
示例 3:
输入: [] 输出: []
代码如下:
class Solution {
public:vector<int> rightSideView(TreeNode* root) {vector<int> res;//定义存放结果的数组queue<TreeNode*> q;//定义队列if(root==nullptr)//二叉树为空,返回空数组{return res;}q.push(root);//将根节点入队while(!q.empty())//队列不为空,进入循环{for(int i=q.size();i>0;i--)//循环次数为当前层节点数,即队列的长度->每遍历完一层,将下一层的节点存入队列中{TreeNode* node=q.front();//队首元素出队,记为nodeq.pop();if(node->left!=nullptr)//此节点的左结点都不为空时,将此结点的左节点入队{q.push(node->left);}if(node->right!=nullptr)//此节点的右结点都不为空时,将此结点的右节点入队{q.push(node->right);}//入队的结点是二叉树下一行的结点if(i==1)//只保留每一行的最后一个结点,存入结果数组中{res.push_back(node->val);}}}return res;//返回最终结果}
};