2015-05-21 3 views
1

Этот код является частью программы RedBlack Tree, которая должна получать «ADSOMERT» и сортировать ее символы в форме «A D E M O R S T». Он выполняет эту работу, но с номерами ASCII каждого персонажа «65 68 69 77 79 82 83 84».код выдает числа ASCII вместо символов

Основная функция:

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(); 
} 

вставки и rb_insert fucntions:

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

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

заказовМои и print_inorder функции:

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

зависимостей класса для узла и дерева:

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; 
} 
+1

Ваш 'insert' принимает' int' вместо 'char' что вы ожидали? – EdChum

+0

Я создал новую 'insert (char x)' с новым 'Node (char data)', но ничего не изменилось ... – Bahador

+0

Пожалуйста, помните, что вам не нужно публиковать весь ваш код. Вот [хорошее руководство] (http://stackoverflow.com/help/mcve) То, что вы должны опубликовать, - это функция print_inorder – laurisvr

ответ

1
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; 
}; 

Вы выводя node-> элемент, и он является внутр. Должен быть символ, если вы хотите вывести "A D E M O R S T"

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

Что-то вроде этого

+0

, поскольку« элемент »был проблемой не« данных ». как я могу определить 'item' как тип' char' и 'integer' в одно и то же время? так как основная цель программы - работать с числами, а объект ADSOMERT - это просто intro ... – Bahador

+0

Вы можете попробовать сделать его классом шаблона, если вы собираетесь использовать различные типы данных. – kyle

+0

путем добавления 'template' перед классом и переопределения' item' как 'char'? – Bahador

Смежные вопросы