您的位置:首页 > 其它

199. Binary Tree Right Side View

2016-04-21 15:51 399 查看
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]
.

【思路】广度遍历,从右到左,vector中只保存树每层最右边的一个节点。

/**
* 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> result;
if(NULL==root) return result;
queue<pair<TreeNode*, int>> q;
q.push(make_pair(root,0));
result.push_back(root->val);
while(!q.empty())
{
auto f = q.front();
q.pop();
if(f.first->right)
{
q.push(make_pair(f.first->right, f.second +1));
}
if(f.first->left)
{
q.push(make_pair(f.first->left, f.second+1));
}
if(!q.empty() && f.second != q.front().second)
{
result.push_back(q.front().first->val);
}
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: