c++ - 二叉搜索树中的打印功能问题
问题描述
我的练习是在 BSTree 中插入元素并找到它的最大元素。在我这样做之后,它没有打印任何东西并且总是返回 0。我尝试使用打印功能,但它是相同的,我不知道原因。请帮忙。提前致谢 ............................................... ..................................................... ..................................................... …………
#include <iostream>
using namespace std;
struct BstNode {
int data;
BstNode *left;
BstNode *right;
BstNode(int data1, BstNode *left1 = nullptr, BstNode *right1 = nullptr) : data(data1), left(left1), right(right1) {}
~BstNode() {}
};
class BinTree {
private:
BstNode *root;
public:
BinTree() : root(NULL) {}
~BinTree() {}
BstNode *Insert(int data, BstNode *root) {
if (root == NULL) {
root = new BstNode(data);
return root;
}
while (data <= root->data) {
if (root->left == NULL) {
root->left = new BstNode(data);
}
Insert(data, root->left);
}
while (data <= root->data) {
if (root->right == NULL) {
root->right = new BstNode(data);
}
Insert(data, root->right);
}
}
int FindMax() {
MaxHelper(root);
}
int MaxHelper(BstNode *root) {
if (root == NULL) {
cout << "List is empty ";
return -1;
} else if (root->right != NULL) {
root = root->right;
}
return root->data;
}
void Preorder(BstNode *root) { //DLR
if (root == NULL) {
return;
}
cout << root->data;
Preorder(root->left);
Preorder(root->right);
}
};
BstNode *root = new BstNode(10);
int main() {
BinTree b;
cout << b.Insert(5, root);
cout<<b.Insert(6, root);
cout << b.Insert(7, root);
cout << b.FindMax();
return 0;
}
解决方案
首先,您必须在代码中包含注释,这样其他人才能理解。而且我在您的代码中发现了很多错误。
首先要注意的是,如果你有一个非 void 函数,它应该返回一些东西。
并using namespace std;
污染命名空间。因此,使用
using std::cout;
using std::endl;
如果您在文件中使用类,则无需单独的结构。尝试在类中实现它。
并且root == NULL
可以更改为!root
。
并且您的 Insert 函数存在逻辑错误。
如果您在 if 语句中返回某些内容,则无需使用 else if,只需使用 if。
最好将两个单独的文件用于主文件和实现文件并将其用作头文件。
并保护您的头文件不被多次包含。
还有 bla bla bla ...;)
在这里,我纠正了你的一些错误。但不是全部,请尝试自己纠正所有问题。
#include <iostream>
using std::cout;
using std::endl;
struct BstNode
{
int data;
BstNode *left;
BstNode *right;
BstNode(int data1) : data(data1), left(NULL), right(NULL){};
~BstNode(){};
};
class BinTree
{
private:
BstNode *root;
public:
BinTree() : root(NULL) {}
~BinTree() {}
BstNode *Insert(int data, BstNode *root)
{
if (!root)
{
return new BstNode(data);
}
if (data > root->data)
{
root->right = Insert(data, root->right);
}
else
{
root->left = Insert(data, root->left);
}
return root;
}
int FindMax(BstNode *root)
{
return MaxHelper(root);
}
int MaxHelper(BstNode *root)
{
if (!root)
{
return -1;
}
if (root->right)
{
root = root->right;
}
return root->data;
}
void Preorder(BstNode *root)
{
if (!root)
return;
Preorder(root->left);
cout << root->data << " ";
Preorder(root->right);
}
};
int main()
{
BstNode *root = new BstNode(10);
BinTree b;
b.Insert(5, root);
b.Insert(6, root);
b.Insert(7, root);
b.Insert(11, root);
cout << b.FindMax(root) << endl;
b.Preorder(root);
return 0;
}
推荐阅读
- java - 指定表架构时编译时的 StructField 问题
- mapbox - 如何创建淡出边缘的区域轮廓?
- mysql - SQL 数据库查询
- javascript - 如何根据纵横比或 x,y 坐标在 React Native 中裁剪图像
- timezone - MARIADB/MYSQL:时区更改的过程 INSERT INTO
- c++ - C++ 在 constexpr if 中使用 string_view
- xcode - 无法更新我的购物车文件,出现以下错误:无法创建工作目录
- urlencode - O365 sharepoint api 上的 UTF 字符处理
- c# - HTTP req,如果我将变量存储在模型中,则仅读取 DateTime?
- grails - Jakarta 邮件无法使用带有 XOAUTH2 令牌的 tls 或 ssl 连接到 gmail smtp