二叉树的右视图-二叉树

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;
    }
};
相关推荐
有意义2 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
用户726876103373 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect3 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
ZhengEnCi1 天前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记1 天前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研
lizhongxuan1 天前
AI小镇 - 涌现
算法·架构
AI工程架构师1 天前
通常说算力是多少 FLOPS,怎么理解,GPU和CPU为什么差异这么大
算法
祈安_1 天前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法
归去_来兮2 天前
拉格朗日插值算法原理及简单示例
算法·数据分析·拉格朗日插值
千寻girling2 天前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法