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;
}