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

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

Восстановить пароль Регистрация
 
KobaEugeneA
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 166
20.04.2014, 09:16     Поиск предка элемента в бинарном дереве #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++ Разобраться в бинарном дереве

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

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

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