class Solution{
public:
vector<int>rightSideView(TreeNode* root) { //方法的类型是vector,需要的参数是节点类型
queue<TreeNode*> que; //创建队列,队列里存的是节点类型
if(root!=NULL) que.push(root); //如果根节点不是空的,把根节点放入队列
vector<int> result; //创建int类型容器,存放输出结果
while (!=que.empty()) //如果队列不是空的,最开始存放了root节点,除非没有root节点
{
/* code */
int size=que.size(); //获取队列的长度,这句放在这个位置,因为队列长度是不断变化的,size值再while中要一开始确定
for(int i=0;i<size;i++){ //循环遍历队列,是这个程序的主要内容
TreeNode* node=que.front(); //首先把最先入队的节点赋值给node,node将代替该节点,执行获值、子节点等任务
que.pop(); //遍历中每处理一个节点,就把该节点弹出队列
if(i==(size-1))result.push_back(node->val);//获取最右侧的值,是解决这个问题的核心,在该队列的遍历中,如果遍历到了队列的尾部,也即是我需要找到的最右侧的节点,那我就需要储存这个节点对应的值
if(node->left)que.push(node->left); //在每一次for循环中,会弹出一个上层节点,加入0/1/2个下层节点,而且这种变化是逐次增加的
if(node->right)que.push(node->right); //当此层for循环结束时,上一层的节点都已经弹出了,且下一层的节点都已进入队列了
}
return result;
}
}
12-24
486
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交