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

Возращение значения в рекурсии - C++

Восстановить пароль Регистрация
 
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
17.02.2012, 21:08     Возращение значения в рекурсии #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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Код:
 
class Tree
{
public:
    static int Count;
    struct tree {
        int key;
        int height;
        int dif;
        tree *left, *right;
    } *root;
    class TreeException{};
    Tree();
    virtual ~Tree();
 
Код самой функции
Код:
 
int Tree::NodeForDelete(tree*&node,int Count)
    {
        if (node)
        {
            if(node->left!=0)
                 NodeForDelete(node->left,Count);
            if(node->height==(root->height/2))//условие
            {
                if(Count==0)
                {           
                    cout<<node->key<<endl;//значение выдается,значит условие выполняется
                    return node->key;
                }
                Count--;
            }
            if(node->right!=0)
                 NodeForDelete(node->right,Count);
            cout<<node->key<<" !!!"<<endl;
        }
        else if(node==root)
        {
            cout<<"Tree is Null"<<endl;
            //return node;
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2012, 21:08     Возращение значения в рекурсии
Посмотрите здесь:

C++ Возращение результата функции в виде указателя на объект
C++ Возращение параметра из функции
C++ Рекурсии.
Возращение количества байт. Структура и чтение с файла C++
Рекурсии(Вычислить значения по формуле) C++
Вычислить значения функции F на интервале от начального значения до конечного значения C++
C++ Выделение памяти оператором new в функции и возращение ею этого значения

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
18.02.2012, 23:45     Возращение значения в рекурсии #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                        if(node->left!=0)
                                 NodeForDelete(node->left,Count);
                        if(node->height==(root->height/2))//условие
                        {
                                if(Count==0)
                                {                       
                                        cout<<node->key<<endl;//значение выдается,значит условие выполняется
                                        return node->key;
                                }
                                Count--;
                        }
                        if(node->right!=0)
                                 NodeForDelete(node->right,Count);
                        cout<<node->key<<" !!!"<<endl;
Очень плохой код.
Вот например, что будет, если первое условие выполниться, вызов NodeForDelete(node->left,Count); вернется, а последующие условия провалятся?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 13:04     Возращение значения в рекурсии #3
Хочешь сказать, у тебя root равен NULL? Строка 27 противоречит строке 40.
Yandex
Объявления
20.02.2012, 13:04     Возращение значения в рекурсии
Ответ Создать тему
Опции темы

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