我想将数字存储在二叉树中,以0退出,然后按升序输出数字。我见过的大多数答案都是在树上搜索,而那几个覆盖这个确切主题的答案使用了我不理解的方法。我相信树本身是正确创建的,但输出功能是错误的。我哪里出错了?
#include <iostream>
#include <stdio.h>
using namespace std;
struct thing {
short num;
short howmany = 0;
thing* right;
thing* left;
};
void insert(thing* akt, short x) {
if (akt == NULL) {
akt = new thing;
akt->left = NULL;
akt->right = NULL;
akt->num = x;
akt->howmany++;
}
else if (akt->num == x) akt->howmany++;
else if (akt->num > x) return insert(akt->right, x);
else return insert(akt->left, x);
}
void output(thing* root) {
thing* akt;
do {
akt = root;
while(akt->left!=NULL) akt=akt->left;
if(akt->right!=NULL) return output(akt->right);
cout << akt->num << " " << akt->howmany << "times\n";
akt = NULL;
} while (root != NULL);
}
int main() {
thing* root = new thing;
short x;
cout << "number: ";
cin >> x;
do {
insert(root, x);
cout << "number: ";
cin >> x;
} while (x != 0);
cout << endl;
output(root);
return 0;
}
答案 0 :(得分:0)
有多个错误。第一个插入函数是按值传递指针,因此从不修改root。
还修正了输出功能。
#include <iostream>
#include <stdio.h>
using namespace std;
struct thing {
short num;
short howmany = 0;
thing* right;
thing* left;
};
void insert(thing* &akt, short x) {
if (akt == NULL) {
akt = new thing;
akt->left = NULL;
akt->right = NULL;
akt->num = x;
akt->howmany++;
}
else if (akt->num == x) akt->howmany++;
else if (akt->num > x) return insert(akt->left, x);
else return insert(akt->right, x);
}
void output(thing* root) {
thing* akt = root;
if(akt == NULL)
return;
output(akt->left);
cout << akt->num << " " << akt->howmany << " times\n";
output(akt->right);
}
int main() {
thing* root = NULL;
short x;
cout << "number: ";
cin >> x;
do {
insert(root, x);
cout << "number: ";
cin >> x;
} while (x != 0);
cout << endl;
output(root);
return 0;
}`