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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TpukcTep
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 13
#1

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

18.07.2013, 22:44. Просмотров 928. Ответов 4
Метки нет (Все метки)

Доброго времени суток. Ребят, я не спец, требуется решить такую задачу:

Написать нерекурсивную программу, печатающую все вершины двоичного дерева. При реализации использовать стек отложенных заданий.Узлы дерева – символы латинского алфавита.
Дерево задается в файле в формате:
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".
Помогите разрешить.
Извиняюсь за повторение темы, но не могу писать в прошлую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 22:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарное дерево (C++):

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру - C++
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой - C++
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

Бинарное дерево - C++
Объясните пжлст почему не работает программа...при вводе файла пишет -842150451 /*Дан адрес P1 вершины дерева — записи типа TNode, ...

Бинарное дерево - C++
Здравствуйте, Корень создаёться вот так TREE *root=NULL; непонятно почему функия добовления использует указатель на указатель ...

Бинарное дерево - C++
Необходимо построить бинарное дерево с методами inorder_tree_walk, tree_search, tree_minimum, tree_successor, tree_insert и tree_delete....

Бинарное дерево - C++
Здравствуйте.Прошу помощи.Никак не могу разобраться в задании.Нужно сделать бинарное дерево и с помощью дерева привести выражение к...

4
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
18.07.2013, 23:10 #2
#include<stack>
?
1
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 используется без инициализации. Что ему вначале присвоить??
0
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
19.07.2013, 01:26 #4
1.Вы работаете с данными которых нет. У вас есть описание узлов Node, но нигде не создается объетов objNode.
2. Раз уж вы описали функцию печати узлов (по сути: traverse), то логично и остальной "интерфейс"(вставить, найти, удалить)описывать функциями. Вам будет легче разбираться в коде.
3. просто посмотреть:
сторонний ресурс
в частности
1
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;
    }
}
0
12.07.2015, 10:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2015, 10:19
Привет! Вот еще темы с ответами:

Бинарное дерево - C++
Здравствуйте.Прошу помощи.Никак не могу разобраться в задании.Нужно сделать бинарное дерево и с помощью дерева привести выражение к...

Бинарное дерево - C++
Народ помогите. На С++ нада написать программу бинарного дерева Требования: 1. В программе должен быть шаблонный класс (template...

Бинарное дерево - C++
Нужно записать в дерево и вывести в форматированном виде каталог файлов(типа windows) на вход даны имена файлов вида c:\win\1 ...

Бинарное дерево - C++
Как организовать вывод бинарного дерева?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru