Как вернуть целое число из пустой функции? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу посчитать количество узлов в двоичном дереве и хотел сохранить количество узлов в пределах обхода порядка уровней.Но функция обхода возвращает void, поэтому мне нужна помощь в «возврате» количества узлов.

void Level_Order(node* root,int n){
queue<node *> q;
if(root){
    q.push(root);
    n++;
}
while(!q.empty()){
    node* temp = q.front();
    q.pop();
    if(temp->left){
        //push temp->left
        n++;
    }
    if(temp->right){
        //push temp->right
        n++;
    }
  }
 }

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Тип возвращаемого значения определяет, какой тип данных (метод) возвращает (если он есть).void указывает на отсутствие возвращаемого типа.

Если вы хотите, чтобы функция возвращала целое число, вам нужно изменить тип возвращаемого значения на int.Это довольно просто, так что я не уверен, куда вы зацикливаетесь.

Как уже отмечали другие, также можно принять ссылку или аргумент-указатель и вернуть обновленное значение вызывающей стороне.Но обычно возвращаемый тип относится к возвращаемому типу функции, и он должен соответствовать тому, что вы хотите вернуть.

1 голос
/ 02 июля 2019

Если вы не хотите менять тип возвращаемого значения с void на int, вам следует изменить тип параметра n:

void Level_Order(node* root,int& n){

n теперь является ссылкой , и исходная переменная будет изменена с помощью этой ссылки.

node root = getRoot();
int nNode = 0;

Level_Order(&root, nNode);
printf("Number of nodes is : %d\n", nNode);
...