思路:
这个题用深度遍历吗?显然不。如果递归遍历的话根本不知道哪个节点才是“能看到的”,所以采用广度遍历,也就是层序遍历。
但是一般的层序遍历都是把一层里面所有的节点都搞进去了,我怎么能做到只拿最右边的节点呢?
这里只需要稍微进行处理就行,因为层序遍历肯定是每一层的节点都存在一个数组里,而要做到右边能看见,就说明取得是该层最右边的节点,反应到数组里,也就是数组中最后一个节点。因此,只需要把最后一个节点加入真正的答案数组里就可以了。
/**
* 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:
vector<int> rightSideView(TreeNode* root) {
if(!root){
return {};
}
queue<TreeNode*> q;
q.push(root);
vector<int> ans;
while(!q.empty())
{
int sz=q.size();
vector<int> temp;
while(sz--)
{
TreeNode*cur=q.front();
q.pop();
temp.push_back(cur->val);
if(cur->left){
q.push(cur->left);
}
if(cur->right){
q.push(cur->right);
}
}
ans.push_back(temp[temp.size()-1]);
}
return ans;
}
};
|