题目描述
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
思路
该题利用队列进行层序遍历,每次输出队列末尾的一个结点的 val 值;
设该二叉树为 1,2,3,4,5,6,7,首先把 1 放入 res,2,3 进入队列 q,q 的最后一个结点的 val(这里为 3)放入 res,循环将 2,3 结点的左右孩子结点放入队列 temp,temp 最终为 4,5,6,7,令 q = temp,将 7 放入 res,以此类推。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> res;
if(root == NULL) return res;
res.push_back(root->val);
queue<TreeNode*> q;
if(root->left)
q.push(root->left);
if(root->right)
q.push(root->right);
while(!q.empty()){
res.push_back(q.back()->val);
queue<TreeNode*> temp;
while(!q.empty()){
TreeNode* tempNode = q.front();
if(tempNode->left)
temp.push(tempNode->left);
if(tempNode->right)
temp.push(tempNode->right);
q.pop();
}
q = temp;
}
return res;
}
};