Hot100-Day50-T199二叉树的右视图

0 阅读1分钟

Day50[26/4/19]T199二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

输入:root = [1,2,3,null,5,null,4]

输出:[1,3,4]

解释:

示例 2:

输入:root = [1,2,3,4,null,null,null,5]

输出:[1,3,4,5]

解释:

示例 3:

输入:root = [1,null,3]

输出:[1,3]

示例 4:

输入:root = []

输出:[]

提示:

  • 二叉树的节点个数的范围是 [0,100]
  • -100 <= Node.val <= 100

解题思路

中右左遍历,然后 DFS 遍历的时候记录一下当前所处的层数,用一个数组存进入到某层后搜索到的第一个数字,后续再有同层的数字直接抛弃。

Code

#include <iostream>
#include <vector>

using namespace std;

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
{
public:
    vector<int> rightSideView(TreeNode *root)
    {
        vector<int> res;
        int layer = 0;
        DFS(root, res, layer);
        return res;
    }

private:
    void DFS(TreeNode *root, vector<int> &res, int layer)
    {
        if (root == nullptr)
        {
            return;
        }

        if (res.size() < layer + 1)
        {
            res.resize(layer + 1);
            res[layer] = root->val;
        }

        DFS(root->right, res, layer + 1);
        DFS(root->left, res, layer + 1);
    }
};

auto main() -> int
{
    cout << "Hello World!\n"
         << endl;
}