二叉搜索树使用最频繁的节点打印出某些语句
Binary Search Tree using the most frequent node to print out certain statements
我有一个二叉搜索树,我想用它来为最常见的节点提供特定的输出,但我很难做到这一点。我已经有代码打印出节点进入树中的次数以及哪一次是最频繁的但是我不知道如何编写 if 语句来比较值并能够输出某些东西如果一个比另一个大。我已经为此工作了几个小时,但无法获得正确的输出,请帮忙。
因此,如果我有更多 a,我希望它具有特定的输出,或者如果我有更多 b,则它应该具有不同的输出等。
首先,将 node
定义更改为更像下面的定义。此定义将结构的所有字段初始化为其零值。对我而言,此更改阻止了行 if (p->data == q->data)
处的访问冲突,可能是因为 next
指针未初始化为 nullptr
.
struct node {
char data{};
int count{};
node *left{};
node *right{};
int height{};
node *next{};
};
同样,我的编译器对未初始化的变量发出警告 res
。所以也应该像 char res{};
.
这样初始化
这似乎适用于 maxChar
函数。第二个重载调用第一个重载,后者递归调用自身。他们不必具有相同的名称。
char maxChar(node *node, int max, char res) {
if (node != nullptr) {
res = maxChar(node->left, max, res);
if (node->count > max) {
max = node->count;
res = node->data;
}
res = maxChar(node->right, max, res);
}
return res;
}
char maxChar(node *node) {
int max{};
char res{};
return maxChar(node, max, res);
}
然后如果需要的话,你可以这样做:
char maxCh = maxChar(root);
switch (maxCh) {
case 'A': cout << "Your recommendation is A." << endl;
break;
case 'B': cout << "Your recommendation is B." << endl;
break;
}
我有一个二叉搜索树,我想用它来为最常见的节点提供特定的输出,但我很难做到这一点。我已经有代码打印出节点进入树中的次数以及哪一次是最频繁的但是我不知道如何编写 if 语句来比较值并能够输出某些东西如果一个比另一个大。我已经为此工作了几个小时,但无法获得正确的输出,请帮忙。 因此,如果我有更多 a,我希望它具有特定的输出,或者如果我有更多 b,则它应该具有不同的输出等。
首先,将 node
定义更改为更像下面的定义。此定义将结构的所有字段初始化为其零值。对我而言,此更改阻止了行 if (p->data == q->data)
处的访问冲突,可能是因为 next
指针未初始化为 nullptr
.
struct node {
char data{};
int count{};
node *left{};
node *right{};
int height{};
node *next{};
};
同样,我的编译器对未初始化的变量发出警告 res
。所以也应该像 char res{};
.
这似乎适用于 maxChar
函数。第二个重载调用第一个重载,后者递归调用自身。他们不必具有相同的名称。
char maxChar(node *node, int max, char res) {
if (node != nullptr) {
res = maxChar(node->left, max, res);
if (node->count > max) {
max = node->count;
res = node->data;
}
res = maxChar(node->right, max, res);
}
return res;
}
char maxChar(node *node) {
int max{};
char res{};
return maxChar(node, max, res);
}
然后如果需要的话,你可以这样做:
char maxCh = maxChar(root);
switch (maxCh) {
case 'A': cout << "Your recommendation is A." << endl;
break;
case 'B': cout << "Your recommendation is B." << endl;
break;
}