Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

17.02.2012, 21:08. Просмотров 537. Ответов 2
Метки нет (Все метки)

Есть бинарное дерево и есть функция, которая должна рекурсивно пройти по вершинам в порядке возрастания ключей и вернуть первое значение, подходящее по условию. Но почему-то функция доходит до самого последнего элемента, хотя не должна. Как это исправить?
Код дерева
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;
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2012, 21:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Возращение значения в рекурсии (C++):

Выделение памяти оператором new в функции и возращение ею этого значения - C++
Сабж, получается после выхода из функции указатель удаляется, а выделенная память не освободится, так? Отсюда вопрос: как организовать...

Рекурсии(Вычислить значения по формуле) - C++
1-x2/2!+x4/4!-x6/6!+..+(-1n)*x2n+1/(2n+1)! функция контроля cos x помогите пожалуйста хотя бы понять как делать, что то я совсем...

Возращение параметра из функции - C++
Приветствую помогите разобраться: есть функция, которая сортирует массив и которая считает количество перестановок. Это кол-во перестановок...

Возращение количества байт. Структура и чтение с файла - C++
Проверяет и не хочет ничего выводить. В чем проблема? while(1) { if(sizeof(inf) != fread(&amp;inf, sizeof(inf),1,f)) break; ...

Возращение результата функции в виде указателя на объект - C++
есть функция My_Class* preprocessing(const My_Class* obj) { My_Class* Result = new My_Class(); ... return Result; } внутри...

Вычислить значения функции F на интервале от начального значения до конечного значения - C++
Написать консольное приложение на С++ Перепечатайте пожалуйста текст задания на форум.

2
villu
203 / 204 / 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); вернется, а последующие условия провалятся?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 13:04 #3
Хочешь сказать, у тебя root равен NULL? Строка 27 противоречит строке 40.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2012, 13:04
Привет! Вот еще темы с ответами:

рекурсии... - C++
задание: Во входном файле задано без ошибок логическое выражение следующего вида : &lt;логическое выражение&gt;::=...

Использование рекурсии - C++
Написать программу, рекурсивно вычисляющую сумму: Найти сумму ряда с точностью , общий член которого равен . Точность считается...

Ошибка в Рекурсии с++ - C++
Здравствуйте,у меня в данном коде выбивает ошибку в строке 23 .В рекурсии я не силён и прошу вашей помощи в решении данной...

задание по рекурсии - C++
Помогите девушке. Задание: Построить синтаксический анализатор для понятия &quot;скобки&quot;. скобки::=А | скобка скобки скобка::=( B...


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

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

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