Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 31

Определение глубины заданного элемента на бинарном дереве

11.12.2018, 00:36. Показов 3370. Ответов 2

Студворк — интернет-сервис помощи студентам
Имеется такое задание:
Написать рекурсивную функцию, которая определяет глубину заданного элемента на дереве и возвращает –1, если такого элемента нет.

Структура дерева:
C++
1
2
3
4
struct Node {
    int data;
    Node *left, *right;
};
Формирование дерева выполняется случайным образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void add(int x, Node* &p)
{
    int i = rand() % 2;
 
    if (p == NULL)
    {
        p = new Node;
        p->data = x;
        p->right = p->left = NULL;
        return;
    }
 
    if (i == 0) add(x, p->right);
    else add(x, p->left);
}
Вот моя функция которую я написал для определения глубины элемента:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int element_depth(int b, Node* &p, int depth) {
    if (p != NULL)
    {   
        depth++;
        if (b == p->data) return depth;
        else
        {
            element_depth(b, p->left, depth);       //рекурсивный вызов левого поддерева
            element_depth(b, p->right, depth);      //рекурсивный вызов правого поддерева
        }
    }
    else return -1;
}
Но тут проблема, эта функция может определять глубину элемента только если он находится в левой части дерева. Подскажите пожалуйста, как можно реализовать эту функцию с рекурсией чтобы она определяла глубину элемента на всём дереве.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2018, 00:36
Ответы с готовыми решениями:

Поиск элемента в бинарном дереве, вставка элемента
Прошу помочь написать программу для поиска элемента в бинарном дереве, и вставки элемента. Могу заплатить, так как нужно срочно. Но прошу...

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

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

2
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
11.12.2018, 00:54
Лучший ответ Сообщение было отмечено ShOkOLaD как решение

Решение

Мне кажется, так лучше:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int element_depth(int b, Node* &p, int depth) {
    if (p != NULL) {
        depth++;
        if (b == p->data) 
            return depth;
        else {
            int d;
            d = element_depth(b, p->left, depth);       // сначала рекурсивный обход левого поддерева
            if (d == -1)                                // не нашли?
                d = element_depth(b, p->right, depth);  // тогда рекурсивный обход правого поддерева
            return d;
        }
    }
    else 
        return -1;
}
1
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 31
11.12.2018, 01:21  [ТС]
Благодарю, очень выручили
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2018, 01:21
Помогаю со студенческими работами здесь

Поиск элемента в бинарном дереве
class function Seach(t: Tree; n: string): Tree; begin Result := nil; if t <> nil then begin if...

Поиск элемента в бинарном дереве
Разработать программу, формирующую динамическую структуру данных для хранения генеалогического дерева. Каждая вершина дерева должна...

Проверка наличия заданного числа в сформированном бинарном дереве
Создать программой числовое двоичное дерево. Написать программу:проверки наличия заданного числа в сформированном дереве.

Поиск наибольшего элемента в бинарном дереве
Доброго времени суток. Есть бинарное дерево, надо найти максимальный элемент и его индекс. Видел код поиска максимального элемента на С++,...

Удаление элемента (узла) в бинарном дереве
По заданию необходимо в бинарном дереве удалять все элементы равные искомому(как все удалять, я почему-то не осознал). На данный момент я...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru