二叉树实现 - 分支上的数字被替换

时间:2016-05-27 21:22:33

标签: c++

以下是我正在尝试实现的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。 当我使用断点检查代码时,我看到每个分支下的数字都被替换了。

1 个答案:

答案 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);
                }
            }