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

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

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

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

20.04.2014, 09:16. Просмотров 408. Ответов 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++ Поиск одинаковых элементов в бинарном дереве.
Поиск ключа в бинарном дереве поиска C++
Определить, есть ли в бинарном дереве хотя бы два одинаковых элемента C++
Строки в бинарном дереве C++
Поиск дубликатов в бинарном дереве C++
C++ Поиск одинаковых элементов в бинарном дереве
C++ Разобраться в бинарном дереве
C++ Поиск элемента с заданным ключом в бинарном дереве, используя обход
C++ Поиск суммы последовательных узлов в бинарном дереве
Предок в бинарном дереве C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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. Почему такое поведение у программы?
Yandex
Объявления
20.04.2014, 09:45     Поиск предка элемента в бинарном дереве
Ответ Создать тему
Опции темы

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