leetcode199. 二叉树的右视图(中等)

leetcode199. 二叉树的右视图(中等)_第1张图片
leetcode199. 二叉树的右视图(中等)_第2张图片
思路一:bfs
具体思路:广度搜索的时候,记录下每一层最后的值即可。

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
       
        if (!root) return {};
        vector<int> ans;
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            int len = q.size();
            for (int i = 0; i < len; ++i) {
                auto frt = q.front();
                q.pop();
                if (i == len - 1) ans.push_back(frt->val);
                if (frt->left) q.push(frt->left);
                if (frt->right) q.push(frt->right);
            }
        }
        return ans;
    }
};

思路二:dfs
具体思路:每一层遍历的时候,先遍历右孩子,再遍历左孩子,遍历的时候记录每一层的深度,这样的话,当depth==ans.size() 时,表示是depth层的第一个节点,push_back()进去

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

你可能感兴趣的:(#,树,深度优先,leetcode,算法)