给定一个二叉树的 根节点 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();//队首元素出队,记为node
q.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;//返回最终结果
}
};