Функция, которая будет принимать дерево в качестве аргумента и возвращать число введенных целых чисел?

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

не будет ли это просто предзаказ? как ниже. Пожалуйста. Спасибо

#include "t.h"void preorder(tnode * t){
if (t == NULL) return;
cout << t->info <<endl;
preorder(t->left);
preorder(t->right);
}

вызов будет предзаказом (т).

Это оригинальная функция у меня есть

 #ifndef T_H

#define T_H

#include <iostream>
#include <iomanip>
using namespace std;

struct tnode {
int info ;
int count;
tnode * right, *left;
};

tnode * insert(int target,tnode * t);
tnode * makenode(int x);
tnode * tsearch(int x,tnode * t);
void inorder(tnode * t);
int height(tnode * t);
int count(tnode * t) ;
int total(tnode * t) ;

#endif

int main() {
int n,c;
tnode * t = NULL, *x;
while (cin >> n) {t=insert(n,t);cout << n <<' ';}
cout << endl;
inorder(t);
cout << endl;
c = count(t);
cout << "count: "<< c  <<endl;
cout << endl;
c = height(t);
cout << "height: "<< c  <<endl;
cout << endl;
c=200;
while (c-->0) if (x = tsearch(c,t)) cout << c << " is on the tree."<<endl;
return 0;
}

#include "t.h"
int count(tnode * t) {
if (t == NULL) return 0;
return 1 +  count(t->left) + count (t->right);
}

#include "t.h"
int height(tnode * t) {
if (t == NULL) return -1;
return 1 + max(height(t->left) , height (t->right));
}

#include "t.h"
//write out t in order
void inorder(tnode * t) {
if (t == NULL) return;
inorder (t->left);//write out lst in order
cout <<setw(5) << t->info <<setw(5) << t->count<< endl;
inorder (t->right);//write out rst in order
}

#include "t.h"
tnode * insert(int x, tnode * t) {
tnode * tmp = tsearch(x,t);
if (tmp != NULL) {
tmp->count++;
return t;
}
if (t == NULL) return makenode(x);
if ( x < t->info ) {
t->left = insert(x,t->left);
return t;
}
t->right = insert(x,t->right);
return t;
}

#include "t.h"
tnode * makenode(int x) {
tnode * t = new tnode;
t->info =x;
t->count =1;
t->right = t->left = NULL;
return t;
}

0

Решение

Во-первых, ваша функция не может быть недействительной. Он должен возвращать количество введенных значений, поэтому он должен возвращать int или int *.

Во-вторых, является ли дерево двоичным деревом, в котором есть все введенные целые числа? Если это так, то подойдет любой алгоритм обхода дерева. Вам просто нужна переменная, которую вы будете увеличивать при обнаружении нового узла (при условии, что все они хранят int).

int preorder(tnode * t){
if (t == NULL) return 0;

else{
return 1 + preorder(t->left) + preorder(t->right);
}
}

Если t не нуль, то в нем хранится 1 int. Тогда вам просто нужно проверить детей узла.

0

Другие решения

Когда пользователь набирает номер, insert Функция либо вставляет новый узел со счетчиком 1, либо добавляет к счетчику существующий узел.
Вам необходимо суммировать количество элементов в дереве:

int tcount(tnode * t){
if (t == NULL) return 0;
return t->count + tcount(t->left) + tcount(t->right);
}

Типичный звонок будет

tnode * root = NULL;

/* insert stuff into the tree */

int count = tcount(root);
0

По вопросам рекламы [email protected]