二进制搜索树中打印功能的问题
Troubles with printing functions in Binary Search Tree
我的练习是在BSTree中插入元素并找到它的最大元素。在我这样做之后,它没有打印任何东西并且总是 return 0。我尝试使用 Print Function 但它是一样的我不知道原因。请帮忙。提前致谢 ............................................... ..................................................... ..................................................... ..........
#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 函数,它应该 return 一些东西。
并且using namespace std;
污染了命名空间。
因此,使用
using std::cout;
using std::endl;
如果您在文件中使用 classes,则不需要单独的结构。尝试在 class.
中实现它
而root == NULL
可以改成!root
。
而且你的 Insert 函数有逻辑错误。
如果你 return 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;
}
我的练习是在BSTree中插入元素并找到它的最大元素。在我这样做之后,它没有打印任何东西并且总是 return 0。我尝试使用 Print Function 但它是一样的我不知道原因。请帮忙。提前致谢 ............................................... ..................................................... ..................................................... ..........
#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 函数,它应该 return 一些东西。
并且using namespace std;
污染了命名空间。
因此,使用
using std::cout;
using std::endl;
如果您在文件中使用 classes,则不需要单独的结构。尝试在 class.
中实现它而root == NULL
可以改成!root
。
而且你的 Insert 函数有逻辑错误。
如果你 return 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;
}