迭代算法,耗时长。每层,入队列,入向量,存入二维向量,进入下级开始循环,追踪上级元素个数,出队列,下级节点入向量,入队列,该层向量存入二维向量。
class Solution {
public: //比二叉树的层次遍历多加了一个vector vec,记录出队列时最后一个元素
vector<int> rightSideView(TreeNode* root) {
vector<vector<int>> res;
vector<int> vec,vec1;
if(root==NULL) return vec;
queue<TreeNode*> que;
que.push(root);
vec1.push_back(root->val);
res.push_back(vec1);
int level=0;
while(!que.empty()){
vector<int> temp;
//临时vector temp要推入二维向量res,以追踪上个向量元素个数
for(int i=0;i<res[level].size();i++){
TreeNode* node = que.front(); //根据上个向量元素个数,逐个跳出队列
que.pop();
if(i==res[level].size()-1) vec.push_back(node->val);
if(node->left!=NULL)
{que.push(node->left); temp.push_back(node->left->val);} //下级节点入队列,入向量
if(node->right!=NULL)
{que.push(node->right); temp.push_back(node->right->val);}
}
level++;
if(!temp.empty())
{res.push_back(temp);}
}
return vec;
}
};
题解简单方法: