Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KobaEugeneA
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 166
#1

Поиск предка элемента в бинарном дереве - C++

20.04.2014, 09:16. Просмотров 468. Ответов 1
Метки нет (Все метки)

Вот функция поиска предка в бинарном дереве поиска:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  tree* predok(tree* root, tree* potomok, int n = -1){
    n++;
    printf("%d %d\n", root -> a, n);
    if(root -> left != NULL){
      if(root -> left == potomok)
    return root;
      else
    predok(root -> left, potomok, n);
    }
    if(root -> right != NULL){
      if(root -> right == potomok)
    return root;
      else 
    predok(root -> right, potomok, n);
    }
    if(n == 0)
      return NULL;
  }
  tree* find_left(tree* root){
    if(root -> left == NULL)
      return root;
    find_left(root -> left);
  }
В функцию отправляю root - указатель на дерево, как на изображении под буквой b перед удалением элемента.
http://www.cyberforum.ru/attachment....1&d=1397971098
potomok - указатель на лепесток с цифрой 11. Функия должна возвращать указатель на лепесток с цифрой 10, а возвращает NULL. В терминале выдаёт:
5 0
2 1
1 2
3 2
10 1
9 2
7 3
8 4
То есть ветку с лепестками 11 и 12 функция вообще не проверяет. Не могу понять почему.
Миниатюры
Поиск предка элемента в бинарном дереве  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 09:16     Поиск предка элемента в бинарном дереве
Посмотрите здесь:

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

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

Поиск одинаковых элементов в бинарном дереве - C++
Нужно вывести на экран все повторяющиеся элементы в бинарном дереве. # include <iostream> # include <conio.h> using namespace...

Поиск ключа в бинарном дереве поиска - C++
Здравствуйте! Помогите ещё с задачками) 1.Поиск ключа в бинарном дереве поиска (точное соответствие). 2. Поиск ключа в бинарном...

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

Поиск суммы последовательных узлов в бинарном дереве - C++
Дано: бинарное дерево (Например созданное по этому алгоритму). Число S. Нужно найти последовательность узлов (только с вверху вниз или...

Определить, есть ли в бинарном дереве хотя бы два одинаковых элемента - C++
Задано бинарное дерево. Определить, есть ли в этом дереве хотя бы два одинаковых элемента. Вывести на экран все одинаковые элементы в...

Подсчет вершин в бинарном дереве - C++
Здравствуйте,помогите написать функцию ,которая подсчитывает число вершин на N-ом уровне бинарного дерева T(корень считать вершиной 0-го...

Удалить узел в бинарном дереве - C++
Добрый вечер. В задании нужно найти узел дерева с наибольшим показателем счетчика, после чего удалить найденный узел из дерева. В структуре...

Сумма чисел в бинарном дереве - C++
Выбрать уровень(глубину, высоту) бинарного дерева и посчитать сумму чисел(в вершинах), находящихся на этом уровне. P.S. Дерево построено,...

Оператор присвоения в бинарном дереве - C++
Не смог разобраться. Прокомментируйте, будьте добры. Задание такое, определите стандартный конструктор и функции управления...

Количество листьев в бинарном дереве - C++
Задача: Найти количество листьев в дереве. Собственно ввод и вывод дерева есть: #include <iostream.h> #include <iomanip.h> ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KobaEugeneA
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 166
20.04.2014, 09:45  [ТС]     Поиск предка элемента в бинарном дереве #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tree* predok(tree* root, tree* potomok, int n = -1){
    n++;
    if(root -> left != NULL){
      if(root -> left == potomok){printf("%d %d 1\n", root -> a, n);
    return root;}
      else
    predok(root -> left, potomok, n);
    }
    if(root -> right != NULL){
      if(root -> right == potomok){printf("%d %d 2\n", root -> a, n);
    return root;}
      else 
    predok(root -> right, potomok, n);
    }
    if(n == 0){printf("%d %d 3\n", root -> a, n);
      return NULL;}
  }
Пробовал ещё так переписывать код. В терминале выдаёт:
10 1 2
5 0 3
То есть он находит нужную ветку, но потом выходит ещё на уровень рекруссии выше и возвращает NULL. Почему такое поведение у программы?
Ответ Создать тему
Опции темы

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