Форум программистов, компьютерный форум CyberForum.ru

Бинарное дерево - C++

Восстановить пароль Регистрация
 
TpukcTep
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 13
18.07.2013, 22:44     Бинарное дерево #1
Доброго времени суток. Ребят, я не спец, требуется решить такую задачу:

Написать нерекурсивную программу, печатающую все вершины двоичного дерева. При реализации использовать стек отложенных заданий.Узлы дерева – символы латинского алфавита.
Дерево задается в файле в формате:
m [e [c [a], g [k] ], s [p [o,s], y ] ]
Рисунок, поясниющий пример:
Бинарное дерево

Есть код:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
struct node {
    char data;
    node *left, *right;
    int visited;
    node() : visited(0) {}
};
 
void print(node *root) {
    if (!root) {
        std::cout << "Tree is empty.";
        return;
    }
    std::stack <node *> stack;
    stack.push(root);
    root->visited = 1;
    node *cur;
    while (!stack.empty()) {
        cur = stack.top();
        if (cur->left && !cur->left->visited) {
            stack.push(cur->left);
            cur->left->visited = 1;
        } else if (cur->right && !cur->right->visited) {
            stack.push(cur->right);
            cur->right->visited = 1;
        } else {
            std::cout << cur->data << " ";
            stack.pop();
        }
    }
}


Компилятор ругается на то, что stack не является членом "std".
Помогите разрешить.
Извиняюсь за повторение темы, но не могу писать в прошлую.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 22:44     Бинарное дерево
Посмотрите здесь:

Бинарное дерево C++
C++ Бинарное дерево
бинарное дерево C++
Бинарное дерево C++
Бинарное дерево C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
18.07.2013, 23:10     Бинарное дерево #2
#include<stack>
?
TpukcTep
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 13
19.07.2013, 00:59  [ТС]     Бинарное дерево #3
Как всё просто оказывается

Добавлено через 1 час 44 минуты
Теперь другая проблема
Дописал код:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
struct node {
    char data;
    node *left, *right;
    int visited;
    node() : visited(0) {}
};
 
void print(node *root) {
    if (!root) {
        std::cout << "Tree is empty.";
        return;
    }
    std::stack <node *> stack;
    stack.push(root);
    root->visited = 1;
    node *cur;
    while (!stack.empty()) {
        cur = stack.top();
        if (cur->left && !cur->left->visited) {
            stack.push(cur->left);
            cur->left->visited = 1;
        } else if (cur->right && !cur->right->visited) {
            stack.push(cur->right);
            cur->right->visited = 1;
        } else {
            std::cout << cur->data << " ";
            stack.pop();
        }
    }
}
void main()
{
    setlocale(LC_ALL,"Russian");
    char* ifName = new char[1024];
    cout << "Введите входное имя файла " << endl;
    cin >> ifName;
    FILE* _if = fopen(ifName, "r");
    char* input = new char[2048];
    fscanf(_if, "%s\n", input);
    fclose(_if);
    const char *strpos = input;
    char c,b;
    node *cur;
    c = *strpos;
    cur->data = *strpos;
    c = *++strpos;
    for (int i=1;i<strlen(input);i++)
    {
        if (c == '[')
            c=*++strpos;
        if ((c >= 'a') && (c <= 'z'))
        {
            b=cur->back->data;
            if (b>c)
            {
                cur->left->data=c;
                c=*++strpos;
                cur->left;
            }
            else
            {
                cur->right->data=c;
                c=*++strpos;
                cur->right;
            }
        }
        if ((c == ']') || (c == ','))
        {
            cur->back;
            c=*++strpos;
        }
    }
    print(cur); 
}


Пишет ошибку во время выполнения, что cur используется без инициализации. Что ему вначале присвоить??
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
19.07.2013, 01:26     Бинарное дерево #4
1.Вы работаете с данными которых нет. У вас есть описание узлов Node, но нигде не создается объетов objNode.
2. Раз уж вы описали функцию печати узлов (по сути: traverse), то логично и остальной "интерфейс"(вставить, найти, удалить)описывать функциями. Вам будет легче разбираться в коде.
3. просто посмотреть:
сторонний ресурс
в частности
nikkk
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 58
12.07.2015, 10:19     Бинарное дерево #5
У меня такое же задание(
Пытаюсь рекурсивно перевести строку m [e [c [a], g [k] ], s [p [o,s], y ] ] в структуру node
Но заполняется только левая часть. Посмотрите, пожалуйста, что я не так делаю?(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Node* convert(char* str){
    Node* node = new Node;
    node->data = str[i];
    if (str[i + 1] == '['){
        i += 2;
        node->left = convert(str);
        return node;
    }
    if (str[i + 1] == ']'){
        i++;
        return node;
    }
    if (str[i + 1] == ','){
        i += 2;
        node->right = convert(str);
        return node;
    }
}
Yandex
Объявления
12.07.2015, 10:19     Бинарное дерево
Ответ Создать тему
Опции темы

Текущее время: 12:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru