-2
以下是C++中的一个简单的二叉树代码,我试图实现,但在运行代码时这些值正在被替换。二叉树实现 - 分支上的数字正在被替换
#include<iostream>
using namespace std;
class bst
{
private:
struct node
{
int data;
node *left;
node *right;
};
public:
node *start = NULL;
node* create_node(node*p,int a)
{
if (p == NULL)
{
node *n1 = new node;
n1->data = a;
n1->left = NULL;
n1->right = NULL;
return n1;
}
else
{
if (a > p->data)
{
p->right = create_node(p->right, a);
}
else if(a < p->data)
{
p->left = create_node(p->left, a);
}
}
}
};
int main()
{
bst l1;
int a[10] = { 12, 4, 3, 9, 6, 5, 10, 13, 34, 23 };
l1.start=l1.create_node(l1.start,a[0]);
for (int i = 0; i < 10; i++)
{
l1.create_node(l1.start, a[i]);
}
return 0;
}
任何人都可以请指出我在哪里出错了。 当我进行Inorder遍历时,我的输出是10 12 23. 当我通过带有断点的代码时,我看到每个分支下的数字被替换。
是你的编译器不给你关于警告/错误的变化缺少create_node的返回值? – kfsone
你的'create_node'返回* what *,again?仔细查看代码。如果你的编译器*不是*给你一个类似于'main.cpp:44:5的警告:控制可能会到达非空函数的末尾',那么你真的需要打开警告级别。如果它*给出了这个警告,那么在完全理解它们的含义之后,修正它(和任何其他警告)*。 – WhozCraig
我看不到这段代码是否错误。我强烈怀疑你的inorder函数是错误的。我继续测试代码,它工作得很好。你能分享你的inorder代码吗? –