题目描述:
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
For example:
Given the following binary tree,
1 <---
/ \
2 3 <---
\ \
5 4 <---
You should return [1, 3, 4].
Credits:
Special thanks to @amrsaqr for adding this problem and creating all test cases.
Hide Tags Tree Depth-first Search Breadth-first Search
分析:只需按序输出每一层的最后右边的节点即可。核心是层次遍历。
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
For example:
Given the following binary tree,
1 <---
/ \
2 3 <---
\ \
5 4 <---
You should return [1, 3, 4].
Credits:
Special thanks to @amrsaqr for adding this problem and creating all test cases.
Hide Tags Tree Depth-first Search Breadth-first Search
分析:只需按序输出每一层的最后右边的节点即可。核心是层次遍历。
以下是C++实现代码;
/**/4ms*/
/**
* 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;
queue<TreeNode* > q;
TreeNode* cur = root;
q.push(cur);
while(!q.empty()){
vector<TreeNode*> tmp; //存放一个层次的所有节点
int rigNum = 0; //保存最右边的节点的值
while(!q.empty()){ //处理一个层次的节点,将其非空左右孩子(即下一层的节点)加入tmp中
cur = q.front();
q.pop();
rigNum = cur->val;
if(cur->left != NULL)
tmp.push_back(cur->left);
if(cur->right != NULL)
tmp.push_back(cur->right);
}
res.push_back(rigNum); //将最右边的节点的值加入结果集
for(int i = 0; i < tmp.size(); i++) //将下一层的节点加入队列
q.push(tmp[i]);
}
}
};