199. Binary Tree Right Side View

思路:
这一题比较容易想到BFS,如果我们从左到右的向队列加入节点,那么最后一个加入的节点就是我们能看到节点,那么就遍历到这层最后一个取出节点的时候就把他加入进res数组。也可以从右到左,把第一个添加进队列里面的节点放入res数组。
代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    vector<int> res;
public:
    vector<int> rightSideView(TreeNode* root) {
        if(root==nullptr) return {};
        vector<int> res;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
            int size=q.size();
            for(int i=0;i<size;++i){
                TreeNode* node = q.front(); q.pop()
                if(node->left) q.push(node->left);
                if(node->right) q.push(node->right);
                if(i==size-1){
                    res.push_back(node->val);
                }
            }
        }
        return res;
    }
};

DFS:
因为我们是从右侧看,那么我们先DFS右子树,如果右节点为NULL,那么我们才去遍历左节点,那么我们就把第一次遍历到的节点加入进去即可。
代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
private:
    vector<int> res;
    void dfs(TreeNode* root,int depth){
        if(root==nullptr) return ;
        if(depth==res.size()){  //因为depth从0开始算,当depth等于size意思为depth增加到新的深度了,这个深度下的元素还没有加入res,同时当加入后size大于depth,那么左节点就不会被加入。也正是加入后size不等于depth,然后depth+1才会等于size,才会是加入元素的条件。
            res.push_back(root->val);
        }
        depth++;
        dfs(root->right,depth);
        dfs(root->left,depth);
    }
public:
    vector<int> rightSideView(TreeNode* root) {
        dfs(root,0);
        return res;
    }
};
posted @ 2021-04-22 21:59  Mrsdwang  阅读(30)  评论(0编辑  收藏  举报