Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
46 / 46 / 1
Регистрация: 14.10.2008
Сообщений: 179

Проблема: создаются лишние элементы в бинарном дереве

17.11.2008, 11:15. Показов 1088. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такой код:

Code
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <iostream>
using namespace std;
 
class Node
{
public:
 
    int number;
    Node* nextLeft;
    Node* nextRight;
    Node* last;
};
 
void fillTheTree(unsigned, Node*, Node*, Node*);
 
void main()
{
    const unsigned arraySize = 13;
    unsigned array[arraySize] = {15, 3, 46, 54, 17, 81, 56, 72, 61, 59, 8, 3, 21};
    int num = -1;
    Node* root = NULL;
    Node* ptr = NULL;
    Node* ptrTemp = NULL;
    Node* current = NULL;
 
    ptr = new Node;//записываем корень
    root = ptr;
    ptr->number = array[0];
    ptr->nextLeft = NULL;
    ptr->nextRight = NULL;
    ptr->last = NULL;
    current = ptr;
    ptrTemp = ptr;
 
    int i = 1;
    while (i < 8)
    {
        fillTheTree(array[i], root, ptrTemp, current);
        i++;
    }
 
    ptr = root;
    ptr = ptr->nextRight;
    ptr = ptr->nextRight;
    ptr = ptr->last;
    ptr = ptr->nextLeft;
    ptr = ptr->last;
    ptr = ptr->nextRight;
    ptr = ptr->nextRight;
    ptr = ptr->nextLeft;
    ptr = ptr->nextRight;
    cout<<"chislo == 72 - "<<ptr->number<<endl;
 
    cout<<"\nptr->nextLeft "<<ptr->nextLeft<<"\nptr->nextRight "<<ptr->nextRight<<endl<<endl;
}
 
 
void fillTheTree(unsigned digit, Node* ptr, Node* ptrTemp, Node* current)
{
    int rez = 0;
    static int count = 1;
    if (digit < ptr->number)
    {
        if ((ptr->nextLeft == NULL))
        {
            ptr = new Node;
            ptr->nextLeft = NULL;
            ptr->nextRight = NULL;
            ptr->number = digit;
            current->nextLeft = ptr;
            ptr->last = ptrTemp;
            return;
        }
 
        if ((ptr->nextLeft != NULL))
        {
            if (digit == 72)
            {
                cout<<count<<":  "<<"!!! Kogda nextRight != NULL\n";
                cout<<"     "<<digit<<" < "<<ptr->number<<endl;
                count++;
            }
            ptr = ptr->nextLeft;
            fillTheTree(digit, ptr, ptr, ptr);
        }
    }
    
    if (digit >= ptr->number)
    {
        if ((ptr->nextRight == NULL))
        {
            if (digit == 72)
            {
                cout<<count<<":  "<<"Kogda nextRight == NULL\n";
                cout<<"     "<<digit<<" >= "<<ptr->number<<endl;
                count++;
            }
            ptr = new Node;
            ptr->nextLeft = NULL;
            ptr->nextRight = NULL;
            ptr->number = digit;
            current->nextRight = ptr;
            ptr->last = ptrTemp;
            return;
        }
 
        if ((ptr->nextRight != NULL))
        {
            if (digit == 72)
            {
                cout<<count<<":  "<<"Kogda nextRight != NULL\n";
                cout<<"     "<<digit<<" >= "<<ptr->number<<endl;
                count++;
            }
 
            ptr = ptr->nextRight;
            fillTheTree(digit, ptr, ptr, ptr);
        }
    }
}
Почему создаются лишние элементы????
Почему появляются указатели направо, когда обрабатывается число 72 и все следующие за ним???
КУДА ФУНЦИЯ ВОЗВРАЩАЕТ УПРАВЛЕНИЕ ПОСЛЕ 5 ШАГА????

При выполении программы шагов 6 и 7 быть ну никак не должно!!!!

Нужен свежий взгляд.

P.S. это типа у меня пошаговая отладка такая
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2008, 11:15
Ответы с готовыми решениями:

Найти максимальный и минимальный элементы в заданном бинарном дереве
Максимальный и минимальный элементы бинарного дерева Разработайте подпрограммы, которые находят максимальный и минимальный элементы в...

Найти в бинарном дереве min и max элементы и переставить их местами
Подскажите , пожалуйста , как можно выполнить следующее задание: Бинарное дерево содержит целые числа. Найти в нем min и max элементы и...

Поиск в бинарном дереве
Не получается организовать поиск в бинарном дереве по значению, а не по ключу. Использую дерево в качестве примера переводчика, то-есть я...

1
46 / 46 / 1
Регистрация: 14.10.2008
Сообщений: 179
20.11.2008, 15:10  [ТС]
Проблема решена. Можно закрывать тему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2008, 15:10
Помогаю со студенческими работами здесь

Обход в бинарном дереве
Здравствуйте! Есть задача создать свое генеалогическое дерево. К счастью, у нас в методичке указаны все процедуры и функции для него, но...

Поиск в бинарном дереве
Привет всем! Нужно написать код, с которым в бинарном дереве можно найти заданное пользователем значение в вершинах и вывести на экран эту...

Поиск в бинарном дереве
Составить рекурсивную функцию для определения первого элемента, у которого совпадают старшая и младшая цифры, в бинарном дереве.

Разобраться в бинарном дереве
Нашел вот такой вариант построения бинарного дерева. Просьба прокомментировать строки кода которые выделил ниже: #include...

Поиск в Бинарном Дереве!
Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два одинаковых элемента. Вывести на экран все одинаковые элементы в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru