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