Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Osgilat
1 / 1 / 5
Регистрация: 29.03.2012
Сообщений: 40
#1

Бинарное дерево: в каком виде описывать вызов процедуры, то есть передавать корень - C++

22.04.2014, 01:07. Просмотров 291. Ответов 3
Метки нет (Все метки)

Не могу понять в каком виде описывать вызов процедуры, то есть передавать корень.
C++ (Qt)
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
75
76
77
78
79
80
81
82
83
#ifndef BINARYTREE_H
#define BINARYTREE_H
#include <iostream>
#include <string.h>
 
using namespace std;
 
class node
{
public:
    node()
    {
       nodeRoot = NULL;
    }
    node *pLeft, *pRight;
    string value;
    string key;
    node *nodeRoot;
};
 
void addLeaf(string value, string key, node *nodeRoot)
{
    if(nodeRoot == NULL)
    {
        nodeRoot = new node;
        nodeRoot -> value = value;
        nodeRoot -> key = key;
        nodeRoot -> pLeft = NULL;
        nodeRoot -> pRight = NULL;
    }
    if (nodeRoot -> key > key)
    {
        if(nodeRoot -> pLeft != NULL)
            addLeaf(value, key, nodeRoot -> pLeft);
        else
        {
            nodeRoot -> pLeft = new node;
            nodeRoot -> pLeft -> pLeft = nodeRoot -> pLeft->pRight = NULL;
            nodeRoot -> pLeft -> key = key;
            nodeRoot -> pLeft -> value = value;
        }
    }
        if (nodeRoot -> key < key)
        {
            if(nodeRoot -> pRight != NULL)
                addLeaf(value, key, nodeRoot -> pRight);
            else
            {
                nodeRoot -> pRight = new node;
                nodeRoot -> pRight -> pLeft = nodeRoot -> pRight -> pRight = NULL;
                nodeRoot -> pRight -> key = key;
                nodeRoot -> pRight -> value = value;
            }
        }
}
 
void find(node *nodeRoot, string tempkey)
{
    if (nodeRoot == NULL)
    {
        cout << "Empty tree..";
    }
    else
    {
     if (nodeRoot -> key == tempkey)
     {
        cout << nodeRoot -> value << endl;
     }
     if (tempkey <= nodeRoot -> key)
     {
         if (nodeRoot -> pLeft)
             find(nodeRoot -> pLeft, tempkey);
     }
     else
     {
         if (nodeRoot -> pRight)
             find(nodeRoot -> pRight, tempkey);
     }
    }
}
 
 
#endif // BINARYTREE_H

http://www.cyberforum.ru/cpp-beginners/thread1406600.html
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <QCoreApplication>
#include <iostream>
#include <string>
 
#include <BinaryTree.h>
 
using namespace std;
 
int main()
{
 
    addLeaf("adsd","1234",root);
 
 
 
 
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2014, 01:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Бинарное дерево: в каком виде описывать вызов процедуры, то есть передавать корень (C++):

Вычисление выражения записанного в виде обратной польской записи используя бинарное дерево
Всем доброго времени суток. Задача вот такая. Имеется скобочное выражение....

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

Бинарное дерево, найти число вхождений, есть наработка
Задание, найти число вхождений заданного элемента, переделываю рабочую...

Преобразовать идеальное бинарное дерево в бинарное дерево поиска
Всем привет, я создал идельное бинарное дерево и написал к нему функции. Как...

Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два одинаковых элемента
Не могу никак придумать сам алгоритм. Есть мысли: сравнивать последовательно...

3
Vaiz
104 / 98 / 40
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
22.04.2014, 01:22 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    node *root;
    root = new node;
    root->key = "1234";
    root->value = "asdf";
    root->pLeft = 0;
    root->pRight = 0;
 
    addLeaf("adsd","1234",root);
 
 
 
 
 
    return 0;
}
Если правильно понял вашу проблему, то нужно просто создать экземпляр класса

Вообще хотя бы вот это нужно внести в конструктор root->pLeft = 0; root->pRight = 0;
1
Osgilat
1 / 1 / 5
Регистрация: 29.03.2012
Сообщений: 40
22.04.2014, 01:41  [ТС] #3
C++ (Qt)
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
75
76
77
78
79
80
81
82
83
84
85
#ifndef BINARYTREE_H
#define BINARYTREE_H
#include <iostream>
#include <string.h>
 
using namespace std;
 
class node
{
public:
    node()
    {
       nodeRoot = NULL;
       nodeRoot -> pLeft = NULL;
       nodeRoot -> pRight = NULL;
    }
    node *pLeft, *pRight;
    string value;
    string key;
    node *nodeRoot;
};
 
void addLeaf(string value, string key, node *nodeRoot)
{
    if(nodeRoot == NULL)
    {
        nodeRoot = new node;
        nodeRoot -> value = value;
        nodeRoot -> key = key;
        nodeRoot -> pLeft = NULL;
        nodeRoot -> pRight = NULL;
    }
    if (nodeRoot -> key > key)
    {
        if(nodeRoot -> pLeft != NULL)
            addLeaf(value, key, nodeRoot -> pLeft);
        else
        {
            nodeRoot -> pLeft = new node;
            nodeRoot -> pLeft -> pLeft = nodeRoot -> pLeft->pRight = NULL;
            nodeRoot -> pLeft -> key = key;
            nodeRoot -> pLeft -> value = value;
        }
    }
        if (nodeRoot -> key < key)
        {
            if(nodeRoot -> pRight != NULL)
                addLeaf(value, key, nodeRoot -> pRight);
            else
            {
                nodeRoot -> pRight = new node;
                nodeRoot -> pRight -> pLeft = nodeRoot -> pRight -> pRight = NULL;
                nodeRoot -> pRight -> key = key;
                nodeRoot -> pRight -> value = value;
            }
        }
}
 
void find(node *nodeRoot, string tempkey)
{
    if (nodeRoot == NULL)
    {
        cout << "Empty tree..";
    }
    else
    {
     if (nodeRoot -> key == tempkey)
     {
        cout << nodeRoot -> value << endl;
     }
     if (tempkey <= nodeRoot -> key)
     {
         if (nodeRoot -> pLeft)
             find(nodeRoot -> pLeft, tempkey);
     }
     else
     {
         if (nodeRoot -> pRight)
             find(nodeRoot -> pRight, tempkey);
     }
    }
}
 
 
#endif // BINARYTREE_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <QCoreApplication>
#include <iostream>
#include <string>
 
#include <BinaryTree.h>
 
using namespace std;
 
int main()
{
    node *root;
       root = new node;
 
 
       addLeaf("adsd","1234",root -> nodeRoot);
       find(root -> nodeRoot,"1234");
    return 0;
}
Вылетает SegmentationFault в 13-14 строках.
0
Jagry
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 8
22.04.2014, 01:48 #4
root -> nodeRoot равна NULL
А зачем вообще в классе node определена nodeRoot, если это указатель на самый "корень" дерева, то у рута он должен быть NULL, но зачем тогда
C
1
2
addLeaf("adsd","1234",root -> nodeRoot);
find(root -> nodeRoot,"1234");
попробуйте
C
1
2
addLeaf("adsd","1234",&root);
find(&root,"1234");
Правда, я вообще не понимаю куда вы хотите добавить листик?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 01:48
Привет! Вот еще темы с решениями:

Бинарное дерево: как происходит добавления элемента в дерево с двумя параметрами
Здравствуйте! Прошу помощи у опытных программистов...)))) Есть класс дерево: ...

Как правильно описывать функции и процедуры в *.dll
Доброго дня всем! Вопрос такой: Как правильно описать функцию или процедуру в...

Когда функции или процедуры нужно описывать до раздела implementation? (речь идет о VCL приложениях)
Пишу в описании типа TForm1 предопределение функции: function bla:bool; и...

В каком формате передавать данные в сетевой игре?
Разрабатываю сетевую игру(викторина) на двоих .Подскажите в каком виде...


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

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

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