二叉树的右视图——力扣199

题目描述
二叉树的右视图——力扣199_第1张图片

法一)广度优先搜索

解题思路
二叉树的右视图——力扣199_第2张图片
复杂度分析
在这里插入图片描述
代码如下

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        if(!root) return {};
        //bfs 层序遍历 将每层最后一个加入结果数组
        vector<int> ans;
        queue<TreeNode*> que;
        que.push(root);
        while(!que.empty()){
            int counts = que.size();
            for(int i=0; i<counts; ++i){
                auto node = que.front();
                que.pop();
                if(node->left) que.push(node->left);
                if(node->right) que.push(node->right);
                if(i==counts-1) ans.push_back(node->val);
            }
        }
        return ans;
    }
};
法二 深度优先搜索

解题思路
二叉树的右视图——力扣199_第3张图片
复杂度分析
在这里插入图片描述
代码如下

class Solution{
public:
    vector<int> ret;
    void _rightview(TreeNode* root, int depth) {
        if (root==nullptr) return;
        if (ret.size() == depth) ret.emplace_back(root->val);
        if(root->right) _rightview(root->right, depth+1);
        if(root->left) _rightview(root->left, depth+1);
    }
    vector<int> rightSideView(TreeNode* root){
        _rightview(root, 0);
        return ret;
    }
};

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)