二叉树的右视图-二叉树

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;
    }
};
相关推荐
码林拾遗WJ14 分钟前
告警分级的自动化实测:模型判断 vs 人工拍板
人工智能·算法·自动化
Tisfy27 分钟前
LeetCode 0453.最小操作次数使数组元素相等:两次遍历(反向思维)
算法·leetcode·题解·遍历·反向思维
君万40 分钟前
【LeetCode每日一题】回溯:46. 全排列 78. 子集 39. 组合总和
算法·leetcode·go
Keep_Trying_Go1 小时前
Consistent-Point半监督人群计数算法详解
人工智能·深度学习·算法·计算机视觉·人群计数
在所不辞兄2 小时前
【零基础学智能仿真-69】综合项目——材料参数驱动的仿真研究
人工智能·深度学习·神经网络·算法·机器学习·1024程序员节
怕浪猫3 小时前
Super-agent 在各大模型厂商的应用情况
算法·面试·github
海绵宝宝转agent3 小时前
LeetCode100 二叉树个人题解
算法·leetcode·深度优先
octopus_c3 小时前
C++ 模板详解:函数模板、类模板、特化与分离编译
开发语言·c++·算法
東隅已逝,桑榆非晚3 小时前
算法1. 双指针法-移动零
c++·算法
CQU_JIAKE5 小时前
11.1[A]
算法