每日一题(LeetCode)----二叉树-- 二叉树的右视图

每日一题(LeetCode)----二叉树-- 二叉树的右视图

1.题目(199. 二叉树的右视图)

  • 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

    示例 1:

    每日一题(LeetCode)----二叉树-- 二叉树的右视图_第1张图片

    输入: [1,2,3,null,5,null,4]
    输出: [1,3,4]
    

    示例 2:

    输入: [1,null,3]
    输出: [1,3]
    

    示例 3:

    输入: []
    输出: []
    

    提示:

    • 二叉树的节点个数的范围是 [0,100]
    • -100 <= Node.val <= 100

2.解题思路

思路一:层序遍历

1.创建一个队列,队列用来存二叉树节点(实际上是地址)和一个结果数组,结果数组用来存最终的结果

2.定义一个变量来记录当前层元素的个数

3.初始时,我们将根节点放入到队列中去,当前层元素个数记为1(提示:每出队列一个元素,那么当前层元素的个数进行-1操作)

4.我们将队列中的首元素出列,并将其不为空的左孩子和右孩子入队,然后当前层元素个数-1,当当前层元素个数变为0时,我们将当前元素放入到我们的结果数组中,并获取下一层元素个数,重复这个操作,直到队列为空结束

5.返回结果数组

3.写出代码

思路一的代码

class Solution {
public:
    vector rightSideView(TreeNode* root) {
        vector res;
        if(root==nullptr){
            return res;
        }
        queue qe;
        int t=0;
        qe.push(root);
        t=1;
        while(!qe.empty()){
            TreeNode* temp=qe.front();
            qe.pop();
            if(temp!=nullptr&&temp->left!=nullptr){
                qe.push(temp->left);
            }
            if(temp!=nullptr&&temp->right!=nullptr){
                qe.push(temp->right);
            }
            t--;
            if(t==0){
                t=qe.size();
                res.push_back(temp->val);
            }

        }

        return res;
    }
};

你可能感兴趣的:(每日一题,leetcode,算法)