层序遍历二叉树后,取每一层节点的最后一个即可
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector< vector<int>> temp01;
vector<int> result;
queue<TreeNode *> w;
if(root)
w.push(root);
while(! w.empty())
{
vector<int> temp02;
int size = w.size();
TreeNode * node;
for(int i = 0;i < size;i ++)
{
node = w.front();
if(node->left)
w.push(node->left);
if(node->right)
w.push(node->right);
temp02.push_back(node->val);
w.pop();
}
temp01.push_back(temp02);
}
for(int i = 0;i < temp01.size();i ++)
result.push_back(temp01[i][temp01[i].size() - 1]);
return result;
}
};
改进:直接在循环中判断是否为每一层的最后一个,不用再另外开辟两个数组完整储存整个二叉树
vector<int> result;
queue<TreeNode *> w;
if(root)
w.push(root);
while(! w.empty())
{
int size = w.size();
TreeNode * node;
for(int i = 0;i < size;i ++)
{
node = w.front();
if(node->left)
w.push(node->left);
if(node->right)
w.push(node->right);
if(i == size - 1)
result.push_back(node->val);
w.pop();
}
}
return result;