Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 10.10.2016
Сообщений: 51
1

Вывод списка всех листьев бинарного дерева поиска

10.04.2017, 18:00. Показов 4706. Ответов 3
Метки нет (Все метки)

Нужно реализовать бинарное дерево поиска и вывести все его вершины, не имеющие потомков.
Само дерево реализовано вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct node {
    int info;
    node *l, *r;
};
void push(int a, node **t) {
    if ((*t) == NULL) {
        (*t) = new node;
        (*t)->info = a;
        (*t)->l = (*t)->r = NULL;
        return;
    }
 
    if (a > (*t)->info)
        push(a, &(*t)->r);
    else
        push(a, &(*t)->l);
}
но вот с выводом листьев возникли затруднения. Буду благодарен, если поможете.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2017, 18:00
Ответы с готовыми решениями:

Вывести разность значений всех листьев бинарного дерева
Дан указатель P1 на корень непустого дерева. Вывести разность значений всех листьев данного...

Функция, которая печатает элементы из всех листьев бинарного дерева
Написать функцию, которая печатает элементы из всех листьев дерева. Добавлено через 2 часа 26...

Исправить не коректно работатющую функцию поиска среднего значения всех листьев бинарного древа
Весь код древа : #include<iostream> using namespace std; #define COUNT 10 class Node {...

Удаление из списка повторений и определение всех листьев дерева
Всем привет, я никак не могу разобраться с теми деревьями и списками. Кому не трудно помогите...

3
1265 / 1023 / 469
Регистрация: 25.12.2016
Сообщений: 3,331
10.04.2017, 18:25 2
Удобно использовать рекурсию
C++
1
2
3
4
5
6
7
8
9
10
void printLeaf(node *t)
{
    if ( (t->l == nullptr) && (t->r == nullptr) )
        cout << t->info << "\n";
    else
    {
        if (t->l) printLeaf(t->l);
        if (t->r) printLeaf(t->r);
    }
}
0
1 / 1 / 0
Регистрация: 10.10.2016
Сообщений: 51
10.04.2017, 18:58  [ТС] 3
Что-то не то...
Для теста
6 5 2 10 1 10 6 7 8 7 3 9 6 2 7 0
должно выводить
1 3 9
но выводит
2 3 6 7 9
0
1265 / 1023 / 469
Регистрация: 25.12.2016
Сообщений: 3,331
10.04.2017, 19:24 4
Цитата Сообщение от _D4rki_ Посмотреть сообщение
Что-то не то...
Может дерево строится неправильно.

Вообще, код построения дерева довольно тяжело воспринимать из-за двойных указателей. В языке C++ лучше использовать ссылку на указатель, что позволит сильно упростить код, убрав ненужные разыменования.
C++
1
void push(int a, node *& t)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2017, 19:24

Печать листьев бинарного дерева
Всем привет! Решаю такую задачу: На входе - последовательность целых чисел, оканчивающаяся 0,...

Функция вывода листьев бинарного дерева
Написал функцию вывода всего что есть в дереве. помогите переделать ее так чтобы она выводила...

Определить число листьев на каждом уровне бинарного дерева
Помогите! Нужно написать программу Определение число листьев на каждом уровне БИНАРНОГО дерева....

Бинарные деревья. Вывод потомков для каждого из узлов бинарного дерева поиска
Здравствуйте, уважаемые форумчане! Продолжая изучать бинарные деревья, решил подумать о выгодности...


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

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

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