199.二叉树的右视图(C++逐句解析)

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;



        }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值