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

Поиск элемента в дереве

24.05.2018, 17:30. Показов 5792. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста сделать поиск элемента

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
// ConsoleApplication4.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream> 
using namespace std;
struct Node
{
    Node *l, *r; //левое и правое поддерево
    int x;  
};
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЗВЕНА В ДЕРЕВО*/
void add(int x, Node *&MyTree) //Функция добавления звена в дерево
{
    if (NULL == MyTree)  //То, о чем я в самом начале писал. Если дерева нет, то сеем семечко
    {
        MyTree = new Node; //Выделяем память под звено дерева
        MyTree->x = x; //Записываем данные в звено
        MyTree->l = MyTree->r = NULL; //Подзвенья инициализируем пустотой во избежание ошибок
    }
 
    if (x<MyTree->x)   //Если нововведенный элемент x меньше чем элемент x из семечка дерева, уходим влево
    {
        if (MyTree->l != NULL) add(x, MyTree->l); //При помощи рекурсии заталкиваем элемент на свободный участок
        else //Если элемент получил свой участок, то
        {
            MyTree->l = new Node;  //Выделяем память левому подзвену. Именно подзвену, а не просто звену
            MyTree->l->l = MyTree->l->r = NULL; //У левого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
            MyTree->l->x = x; //Записываем в левое подзвено записываемый элемент 
        }
    }
 
    if (x>MyTree->x)   //Если нововведенный элемент x больше чем элемент x из семечка дерева, уходим вправо
    {
        if (MyTree->r != NULL) add(x, MyTree->r); //При помощи рекурсии заталкиваем элемент на свободный участок
        else //Если элемент получил свой участок, то
        {
            MyTree->r = new Node;  //Выделяем память правому подзвену. Именно подзвену, а не просто звену
            MyTree->r->l = MyTree->r->r = NULL; //У правого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
            MyTree->r->x = x; //Записываем в правое подзвено записываемый элемент 
        }
    }
 
}
 
int main()
{
    int x; //Некоторые данные
    Node *MyTree = NULL; //Указатель на нашу структуру. Инициализируем во избежание ошибок
    for (int i = 0; i<7; i++) //В дереве будет 7 узлов
    {
        cout << "X = "; cin >> x; //Ввели X с клавиатуры
        add(x, MyTree); //Добавили X в дерево
    }
    cout << endl;
    Show(MyTree); 
    cout << endl;
    Show1(MyTree);
    cout << endl;
    Show2(MyTree);//Обошли дерево и показали его звенья в линейном порядке
    system("pause");
    //return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.05.2018, 17:30
Ответы с готовыми решениями:

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

Поиск элемента по значению в дереве
Добрый вечер) По заданию нужно выполнить поиск элемента по значению (возвратить номер уровня). Помогите пожалуйста исправить ошибку в коде,...

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

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.05.2018, 19:39
Show у тебя есть же. Возьми оттуда обход дерева и ищи.
0
0 / 0 / 0
Регистрация: 28.02.2016
Сообщений: 198
24.05.2018, 19:43  [ТС]
можешь пожалуйста написать, как должен выглядеть код, я пытался, но никак
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void search(Node *&tree, int el)
{
    if (NULL == tree)    return;    //Если дерева нет, выходим
    
    /*f (tree->x == el)
    {
        cout << "yes";
    }*/
 
    while (tree->l  != NULL)
    
    if (tree->l->x == el)
    {
        cout << "yes";
    }
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
24.05.2018, 21:15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool search(Node *tree, int el)
{
    if (tree == NULL) return false;
    std::queue<Node *> q;
    q.push(tree);
    while (q.size() > 0)
    {
        Node *n = q.front();
        q.pop();
        if (n->x == el) return true;
        else
        {
            if (n->l != NULL) q.push(n->l);
            if (n->r != NULL) q.push(n->r);
        }
    }
    return false;
}
0
0 / 0 / 0
Регистрация: 28.02.2016
Сообщений: 198
25.05.2018, 12:33  [ТС]
C++
1
std::queue<Node *> q;
тут ошибка

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
*void Showq(Node *&tree, int el)
{
    if (NULL == tree)    return;    
    
    Showq(tree->l, el); 
    Showq(tree->r, el);
    if (tree->x == el)
    {
        cout << "True" << endl;
    }
А так разве неправильно, работает же???
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.05.2018, 12:38
Цитата Сообщение от 314251 Посмотреть сообщение
тут ошибка
Какая? Текст покажи.

Добавлено через 1 минуту
Цитата Сообщение от 314251 Посмотреть сообщение
работает же
Ну если работает, то в чём вопрос?
0
0 / 0 / 0
Регистрация: 28.02.2016
Сообщений: 198
25.05.2018, 12:47  [ТС]
но не знаю, как-то слишком легко выглядит, просто задание С помощью указателей построить бинарное дерево поиска. Обойти его прямым способом. Реализовать процедуры поиска Правильно ли реализовано это в коде?

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
#include "stdafx.h"
#include <iostream> 
using namespace std;
struct Node
{
    Node *l, *r; 
    int x;  
};
 
 
void add(int x, Node *&MyTree) //Функция добавления звена в дерево
{
    if (NULL == MyTree)  //То, о чем я в самом начале писал. Если дерева нет, то сеем семечко
    {
        MyTree = new Node; //Выделяем память под звено дерева
        MyTree->x = x; //Записываем данные в звено
        MyTree->l = MyTree->r = NULL; //Подзвенья инициализируем пустотой во избежание ошибок
    }
 
    if (x<MyTree->x)   //Если нововведенный элемент x меньше чем элемент x из семечка дерева, уходим влево
    {
        if (MyTree->l != NULL) add(x, MyTree->l); //При помощи рекурсии заталкиваем элемент на свободный участок
        else //Если элемент получил свой участок, то
        {
            MyTree->l = new Node;  //Выделяем память левому подзвену. Именно подзвену, а не просто звену
            MyTree->l->l = MyTree->l->r = NULL; //У левого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
            MyTree->l->x = x; //Записываем в левое подзвено записываемый элемент 
        }
    }
 
    if (x>MyTree->x)   //Если нововведенный элемент x больше чем элемент x из семечка дерева, уходим вправо
    {
        if (MyTree->r != NULL) add(x, MyTree->r); //При помощи рекурсии заталкиваем элемент на свободный участок
        else //Если элемент получил свой участок, то
        {
            MyTree->r = new Node;  //Выделяем память правому подзвену. Именно подзвену, а не просто звену
            MyTree->r->l = MyTree->r->r = NULL; //У правого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
            MyTree->r->x = x; //Записываем в правое подзвено записываемый элемент 
        }
    }
 
}
 
void Show(Node *&tree)
{
    if (NULL == tree)    return;    
 
    cout << tree->x << endl; 
    Show(tree->l);    
    Show(tree->r);  
}
0
0 / 0 / 0
Регистрация: 28.02.2016
Сообщений: 198
25.05.2018, 12:50  [ТС]
вот ошибки
Миниатюры
Поиск элемента в дереве  
0
0 / 0 / 0
Регистрация: 28.02.2016
Сообщений: 198
25.05.2018, 13:15  [ТС]
ошибку исправил, забыл добавить #include <queue>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2018, 13:15
Помогаю со студенческими работами здесь

Поиск предка элемента в бинарном дереве
Вот функция поиска предка в бинарном дереве поиска: tree* predok(tree* root, tree* potomok, int n = -1){ n++; ...

Реализовать поиск и удаление элемента по индексу в бинарном дереве
Здравствуйте подскажите пожалуйста как сделать удаление и поиск по индексу. #include&lt;iostream&gt; #include &lt;Windows.h&gt; ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru