LeetCode[199] 二叉树的右视图

[199] 二叉树的右视图

题目链接: https://leetcode.cn/problems/binary-tree-right-side-view/description/

WA

一开始的想法是遍历二叉树,只需要右分枝即可。但是如果右边没有节点,就可以看到左边的点。

class Solution {
public:
    vector<int> ans;
    void dfs(TreeNode *t)
    {
        if (t == nullptr)
            return;
        ans.push_back(t->val);
        dfs(t->right);
    }
    vector<int> rightSideView(TreeNode *root)
    {
        dfs(root);
        return ans;
    }
};

AC

于是想到层次遍历,把每一层都从左到右存储下来。之后取每一层的最后一个节点

class Solution {
public:
    vector<int> ans[110];
    vector<int> res;
    int n = 0;
    void dfs(int u, TreeNode *t)
    {
        n = max(n, u);
        if (t == nullptr)
            return;
        ans[u].push_back(t->val);
        dfs(u + 1, t->left);
        dfs(u + 1, t->right);
    }

    vector<int> rightSideView(TreeNode *root)
    {
        dfs(1, root);
        for (int i = 1; i < n; i ++)
        {
            res.push_back(ans[i].back());
        }
        return res;
    }
};
posted @ 2022-11-21 22:45  星星亮了欸  阅读(26)  评论(0编辑  收藏  举报