- 二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:
输入: [1,null,3]
输出: [1,3]
示例 3:
输入: []
输出: []
提示:
二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100
题解
直接BFS遍历,然后标记树的深度,先遍历右子树。
AC代码
/**
* Definition for a binary tree node.
* 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:
struct Node
{
TreeNode *root;
int depth;
};
int dp[105];
queue<Node>q;
void bfs(TreeNode* root)
{
Node t;
for(int i=1;i<105;i++)
dp[i]=-1e9;
t.root=root,t.depth=1;
q.push(t);
while(!q.empty())
{
t=q.front();
q.pop();
if(dp[t.depth]==-1e9)
dp[t.depth]=t.root->val;
if(t.root->right!=NULL)//优先遍历右边
{
Node w;
w.root=t.root->right;
w.depth=t.depth+1;
q.push(w);
}
if(t.root->left!=NULL)
{
Node w;
w.root=t.root->left;
w.depth=t.depth+1;
q.push(w);
}
}
}
vector<int>res;
vector<int> rightSideView(TreeNode* root) {
if(root==NULL)return res;
bfs(root);
for(int i=1;i<105;i++)
{
if(dp[i]!=-1e9)
res.push_back(dp[i]);
}
return res;
}
};