if you know level order traversal then you also know the solution of this question. this question is same as level order traversal with little modification.
vector<int> rightSideView(TreeNode* root) {
vector<int>mainans;
queue<TreeNode*> q;
if(root==NULL){
return mainans;
}
q.push(root);
q.push(NULL);
TreeNode *ans,*ans1;
while(!q.empty()){
ans=q.front();
q.pop();
if(!q.empty())
ans1=q.front();
else{
break;
}
if(!ans){
if(q.empty()){
break;
}
else{
q.push(NULL);
continue;
}
}
if(!ans1 && ans){
mainans.push_back(ans->val);
}
if(ans->left!=NULL && ans->right!=NULL){
q.push(ans->left);
q.push(ans->right);
}
if(ans->left!=NULL && ans->right==NULL){
q.push(ans->left);
}
if(ans->left==NULL && ans->right!=NULL){
q.push(ans->right);
}
if(ans->left==NULL && ans->right==NULL){
continue;
}
}
return mainans;
}
vector<int>mainans;
queue<TreeNode*> q;
if(root==NULL){
return mainans;
}
q.push(root);
q.push(NULL);
TreeNode *ans,*ans1;
while(!q.empty()){
ans=q.front();
q.pop();
if(!q.empty())
ans1=q.front();
else{
break;
}
if(!ans){
if(q.empty()){
break;
}
else{
q.push(NULL);
continue;
}
}
if(!ans1 && ans){
mainans.push_back(ans->val);
}
if(ans->left!=NULL && ans->right!=NULL){
q.push(ans->left);
q.push(ans->right);
}
if(ans->left!=NULL && ans->right==NULL){
q.push(ans->left);
}
if(ans->left==NULL && ans->right!=NULL){
q.push(ans->right);
}
if(ans->left==NULL && ans->right==NULL){
continue;
}
}
return mainans;
}
Comments
Post a Comment