Given a binary tree, imagine yourself standing on therightside of it, return the values of the nodes you can see ordered from top to bottom.
For example:Given the following binary tree,
1<— / \23<— \\ 54<—
You should return[1, 3, 4].
采用层序遍历的方式,每一层的最后一个结点即为在右侧可以看到的结点;
/** * 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) {queue<TreeNode*> nodes;vector<int> vec;vector< vector<int> > result;vector<int> tmp;if(NULL==root)return vec;nodes.push(root);while(!nodes.empty()){int length=nodes.size();int i=0;while(i<length){TreeNode* tmpNode=nodes.front();tmp.push_back(tmpNode->val);if(tmpNode->left)nodes.push(tmpNode->left);if(tmpNode->right)nodes.push(tmpNode->right);nodes.pop();i++;}result.push_back(tmp);tmp.clear();}for(size_t i=0;i<result.size();++i){vec.push_back(result[i][result[i].size()-1]);}return vec;}};
,偶尔,我一个人站在黄昏的荒野,