该题实际上等于求每一层中的最右边的节点,可以使用队列结合二叉树的层次遍历实现
vector<int> rightSideView(TreeNode* root) {
if(!root)
return {};
vector<int> res;
queue<TreeNode*> nodeQueue;
nodeQueue.push(root);
while(!nodeQueue.empty())
{
int num = nodeQueue.size(); //该层的数量
for(int i = 0; i < num; i++)
{
TreeNode* node = nodeQueue.front();
nodeQueue.pop();
//将该节点的子节点入队
if(node->left)
nodeQueue.push(node->left);
if(node->right)
nodeQueue.push(node->right);
//最右节点加入结果
if(i == num - 1)
res.push_back(node->val);
}
}
return res;
}