199. 二叉树的右视图
-
199. 二叉树的右视图
给定一个二叉树的 根节点
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:
class Solution {
public:
vectorans;
//采用BFS深度优先搜索
vector rightSideView(TreeNode* root) {
if(root==nullptr)return ans;
queuepq;//BFS核心数据结构
pq.push(root);
while(!pq.empty()){
int sz=pq.size();
//队列的顶部元素就是能看见的节点数,即最右侧元素
TreeNode* cur=pq.front();
for(int i=0;iright!=nullptr)pq.push(p->right);
if(p->left!=nullptr)pq.push(p->left);
}
ans.push_back(cur->val);
}
return ans;
}
};
DFS:
本题使用DFS深度优先搜索要想到ans容器中元素数量和二叉树深度的关系,同时要注意遍历时要先去遍历右子树再去遍历左子树
class Solution {
public:
//DFS
vector ans;
//记录递归的层数
int dep=0;
vector rightSideView(TreeNode* root) {
traver(root);
return ans;
}
//二叉树遍历
void traver(TreeNode* root){
if(root==nullptr)return;
//前序遍历
dep++;
if(ans.size()val);
}
//这里要先遍历右子树再去遍历左子树
//这样首先遍历的一定是右侧节点
traver(root->right);
traver(root->left);
//回到上一层
dep--;
}
};