Search code examples
c++charasciired-black-tree

code gives out ASCII numbers instead of characters


This code is part of a RedBlack Tree program supposed to receive "ADSOMERT" and sort its characters into Inorder form "A D E M O R S T". It does the job, but with the ASCII numbers of each character "65 68 69 77 79 82 83 84".

Main function:

int main()
{

    Tree char_tree = Tree();

    cout << "Eingabe: ADSOMERT" << endl;

    char_tree.insert('A');
    char_tree.insert('D');
    char_tree.insert('S');
    char_tree.insert('O');
    char_tree.insert('M');
    char_tree.insert('E');
    char_tree.insert('R');
    char_tree.insert('T');

    cout << "ADSOMERT in In-Order" << endl;

    char_tree.print_inorder();
}

insert and rb_insert fucntions:

void Tree::insert(int x)
{
    ...
}

void Tree::rb_insert(Node *& node, Node *&parent, int x, bool sw)
{
    ...
}

inorder and print_inorder functions:

void Tree::print_inorder()
{
    inorder(head->right);
    cout << endl;
}


void Tree::inorder(Knote* node)
{
    if (node != nullptr)
    {
        inorder(node->left);
        cout << node->item << " ";
        inorder(node->right);
    }
}

class dependencies for Node and Tree:

Node.h

class Node {
public:
    Node(int data = 0);
    bool red;
    int item;
    Node *left;
    Node *right;
    Node *parent;
};

Node.cpp

Node::Node(int data)
{
    this->item = data;

    parent = nullptr;
    left = nullptr;
    right = nullptr;
    red = true;
}

Solution

  • void Tree::inorder(Knote* node)
    {
        if (node != nullptr)
        {
            inorder(node->left);
            cout << node->item << " ";
            inorder(node->right);
        }
    }
    
    class Node {
    public:
        Node(int data = 0);
        bool red;
        int item;
        Node *left;
        Node *right;
        Node *parent;
    };
    

    You are outputting node->item and it is an int. Should be a char if you want to output "A D E M O R S T"

    template <class T>
    class Node{
    public:
        Node(int data = 0);
        bool red;
        T item;
        ....
    };
    

    Something like this