код не показывает результат на онлайн-компиляторе - PullRequest
0 голосов
/ 15 января 2020

Я пытался написать код для обхода дерева в вертикальном порядке, и мой код печатает результат на code :: blocks, однако он не печатает результат, когда то же самое выполняется в онлайн-представлении geekforgeeks. Почему он это делает?

void getvert(Node* root,int hd,map<int,vector<int>>m){
    if(root==NULL)return;
    m[hd].push_back(root->data);
    getvert(root->left,hd-1,m);
    getvert(root->right,hd+1,m);
}



void verticalOrder(Node *root)
{
    map<int,vector<int>>m;
    int hd=0;
    getvert(root,hd,m);

    auto it=m.begin();
   for(;it!=m.end();it++)
   {
        for (int i=0; i<it->second.size(); ++i)
            cout<<it->second[i];
        cout<<endl;
   }
}

1 Ответ

3 голосов
/ 15 января 2020

Функция getvert принимает последний аргумент, m, в качестве значения. Изменения, внесенные в него в функции, вносятся в локальную копию объекта. Следовательно, вы не видите никаких изменений в verticalOrder.

Изменение getvert, так что он принимает m в качестве ссылки.

void getvert(Node* root,int hd, map<int,vector<int>>& m) // Need reference argument
{
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...