leetcode-199. 二叉树的右视图

题目

leetcode-199. 二叉树的右视图_第1张图片
leetcode-199. 二叉树的右视图_第2张图片

解法

久违得拿到题目就联想到了之前学习的方法:层序遍历。只不过之前的层序遍历是从左至右依次打印,该题我们只需要打印每层的最右节点值。
简单说一下层序遍历,就是使用队列存储每一层的节点,以层为单位进行操作,每弹出一个节点就存入它的左右子节点值。
代码如下:

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        //层序遍历一下
        vector<int>res;
        if(root == nullptr) {
            return res;
        }
        queue<TreeNode*>q;
        q.push(root);
        while(!q.empty()) {
            int sz = q.size();
            //取第一个值
            TreeNode* first = q.front();
            for(int i = 0; i < sz; i++) {
                TreeNode* temp = q.front();
                q.pop();
                //先找右子树,实现从右至左存储
                if(temp->right != nullptr) {
                    q.push(temp->right);
                }
                if(temp->left != nullptr) {
                    q.push(temp->left);
                }
            }
            res.push_back(first->val);
        }
        return res;
    }
};

不过似乎时间和空间上没那么理想。
leetcode-199. 二叉树的右视图_第3张图片

你可能感兴趣的:(#,leetcode学习,leetcode,c++)