以下是我正在尝试实现的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。 当我使用断点检查代码时,我看到每个分支下的数字都被替换了。
答案 0 :(得分:0)
我的订单功能是:
void printInorder(node* node)
{
if (node == NULL)
return;
printInorder(node->left);
printf("%d ", node->data);
printInorder(node->right);
}
我发现了这个问题,使其发挥作用的变化与Vallabh建议的相似
if (a > p->data)
{
if (p->right == NULL)
{
p->right = create_node(p->right, a);
}
else
{
create_node(p->right, a);
}
}