无法在C ++中遍历二进制搜索树中的元素

时间:2017-12-05 03:12:06

标签: c++ data-structures binary-search-tree tree-traversal inorder

我试图使用inorder遍历打印所有元素,但我的代码输出不正确。我无法弄清楚出了什么问题。

#include <iostream>
using namespace std;

struct node
{
    int value;
    struct node * left;
    struct node * right;
};

class Btree
{
    node * root;

    void insert(int value, node * leaf);
    node * search(int value, node * leaf);
    void destroy(node * leaf);


    public:
        Btree() { root = NULL; }
        ~Btree() {  destroy();  }
        void insert(int value);
        node * search(int value);
        void destroy();
        void inorder(node * ptr);
};

void Btree::inorder(node *ptr)
{
    if (ptr != NULL)
    {
        inorder(ptr->left);
        cout << ptr->value << "";
        inorder(ptr->right);
    }
}

void Btree::destroy(node *leaf)
{
    if(leaf!=NULL)
    {
            destroy(leaf->left);
            destroy(leaf->right);
            delete leaf;
    }
}

void Btree :: destroy()
{
    destroy(root);
}


node *Btree::search(int value, node *leaf)
{
    if(leaf!=NULL)
    {   
            if(value==leaf->value)
            return leaf;
            if(value<leaf->value)
            return search(value, leaf->left);
            else 
        return search(value, leaf->right);
    }
    else return NULL;
}

node *Btree::search(int value)
{
    return search(value, root);
}


void Btree::insert(int value, node *leaf)
{
    if(value< leaf->value)
    {
           if(leaf->left!=NULL)
            insert(value, leaf->left);
           else
           {
            leaf->left=new node;
            leaf->left->value=value;
            leaf->left->left=NULL;    //Sets the left child of the child node to null
            leaf->left->right=NULL;   //Sets the right child of the child node to null
           }  
    }
    else if(value>=leaf->value)
    {
           if(leaf->right!=NULL)
            insert(value, leaf->right);
           else
           {
            leaf->right=new node;
            leaf->right->value=value;
            leaf->right->left=NULL;  //Sets the left child of the child node to null
            leaf->right->right=NULL; //Sets the right child of the child node to null
           }
    }   
}


void Btree::insert(int value)
{
  if(root!=NULL)
        insert(value, root);
  else
  {
        root=new node;
        root->value=value;
        root->left=NULL;
        root->right=NULL;
  }
}


int main()
{
    Btree bst;
    struct node * root = NULL;
    root = new node;
    bst.insert(10);
    bst.insert(6);
    bst.insert(14);
    bst.insert(3);
    bst.insert(8);
    bst.insert(7);
    bst.insert(9);
    bst.insert(5);

    bst.inorder(root);
    return 1;
}

我试图创建一个作为根的内存指针,然后在我的inorder函数调用中传递该根。我的顺序应该打印输出

3 5 6 7 8 9 10 14

指向步进调试器的指针可以帮助我解决我认为的问题。或者,如果有人能提供我更正的代码,那将非常有帮助

编辑: - 我之前已经通过了ptr,但在我的inorder函数定义中使用了root(由于我遇到了Bus错误),但是现在它已经被修改了。但是,我仍然没有得到正确的输出。我得到的输出是0

0 个答案:

没有答案