二叉树的右视图-二叉树

199. 二叉树的右视图 - 力扣(LeetCode)

层序遍历,广度优先

queue先进后出,每层从左往右进树,最后一个就是最右边的数;pop掉这层的。push下一层;

cpp 复制代码
class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        if(root==nullptr)
            return vector<int>();

        vector<int>  rtnum;
        queue<TreeNode*> nodetree;

        nodetree.push(root);
        while(!nodetree.empty())
        {
            int size = nodetree.size();
            TreeNode* tmp;

            for(int i = 0; i < size; i++)
            {
                tmp = nodetree.front();
                nodetree.pop();
                if(tmp->left)
                    nodetree.push(tmp->left);
                if(tmp->right){nodetree.push(tmp->right);}
            }
            rtnum.push_back(tmp->val);
        }
        return rtnum;

    }
};

递归

遍历顺序改为根、右子树、左子树;

这样往下遍历,到达新一层的第一个节点就是右子树;

就是到达新的深度的第一个就是最右边的;

cpp 复制代码
class Solution {
    vector<int> ans;

    void dfs(TreeNode* node, int depth) {
        if (node == nullptr) {
            return;
        }
        if (depth == ans.size()) { // 这个深度首次遇到
            ans.push_back(node->val);
        }
        dfs(node->right, depth + 1); // 先递归右子树,保证首次遇到的一定是最右边的节点
        dfs(node->left, depth + 1);
    }

public:
    vector<int> rightSideView(TreeNode* root) {
        dfs(root, 0);
        return ans;
    }
};
相关推荐
什巳3 小时前
JAVA练习309- 二叉树的层序遍历
java·数据结构·算法·leetcode
什巳5 小时前
JAVA练习306- 翻转二叉树
java·数据结构·算法·leetcode
smj2302_796826525 小时前
解决leetcode第3989题网格中保持一致的最大列数
python·算法·leetcode
巧克力男孩dd7 小时前
Python超典型练习题(第一次作业)
开发语言·python·算法
爱刷碗的苏泓舒7 小时前
平方根信息滤波:矩阵推导及 GNSS 参数估计应用
线性代数·算法·矩阵·gnss·参数估计·测量平差·平方根信息滤波
想做小南娘,发现自己是女生喵8 小时前
第 2 章 顺序表和 vector
java·数据结构·算法
艾醒8 小时前
2026年第29周(7.13-7.19)AI全复盘:技术突破、行业趣闻翻车、算力服务器商业动态
人工智能·算法
雪碧聊技术9 小时前
动态规划算法—01背包问题
算法·动态规划
bu_shuo9 小时前
c与cpp中的argc和argv
c语言·c++·算法
普贤莲花9 小时前
【2026年第29周---写于20260718】---整理,断舍离
程序人生·算法·生活