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

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

Войти
Регистрация
Восстановить пароль
 
Rosenroot
2 / 2 / 0
Регистрация: 21.12.2013
Сообщений: 23
Завершенные тесты: 2
#1

Девевья. Поиск с включением - C++

31.05.2014, 03:01. Просмотров 292. Ответов 0
Метки нет (Все метки)

Программа формирует дерево из массива целых чисел и выводит его на экран.
Кликните здесь для просмотра всего текста
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <iostream>
struct Node{
    int d;
    Node *left;
    Node *right;
};
Node *first(int d);
Node *search_insert(Node *root, int d);
void print_tree(Node * root, int l);
//-------------------------------------
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int b[] = {10,25,20,6,21,8,1,30};
    Node *root = first(b[0]);
    for (int i = 1; i < 8; i++)search_insert(root, b[i]);
    print_tree(root, 0);
    getchar();
    return 0;
}
//---------------------------------------
// формируем первый элемент дерева
Node *first(int d){
    Node *pv = new Node;
    pv->d = d;
    pv->left = 0;
    pv->right = 0;
    return pv;
}
//---------------------------------------
// поиск с включением
 Node *search_insert(Node *root, int d){
    Node *pv = root, *prev;
    bool found = false;
    while (pv && !found){
        prev = pv;
        if      (d ==pv->d) found = true;
        else if (d < pv->d) pv    = pv->left;
        else                pv    = pv->right;
    }
    if (found) return pv;
    // создание нового узла
    Node *pnew = new Node;
    pnew->d     = d;
    pnew->left  = 0;
    pnew->right = 0;
 
    if (d < prev->d)
        // присоединение к левому поддереву предка
        prev->left = pnew;
    else
        // присоединение к правому поддереву предка
        prev->right = pnew;
    return pnew;
}
//--------------------------------------------------
// обход дерева
void print_tree(Node *p, int level){
    if (p){
        print_tree(p->left, level + 1);
        for (int i = 0; i<level; i++)cout<<"    ";
        cout<< p->d <<endl;
        print_tree(p->right, level + 1);
    }
}


Проблема вот в чем :

if (d < prev->d)
// присоединение к левому поддереву предка
prev->left = pnew;
else
// присоединение к правому поддереву предка
prev->right = pnew;
return pnew;

Тут выдает ошибку: error C4703: используется потенциально неинициализированная локальная переменная-указатель "prev"! Прошу помочь устранить ошибку.

Добавлено через 7 минут
Все, решил проблему: Node *pv = root, *prev; переписал как:
Node *pv = root, *prev=NULL;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 03:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Девевья. Поиск с включением (C++):

Сортировка включением - C++
блин не сильно розбираюсь на С++ нужна помощь

Сортировка с двойным включением - C++
Помогите написать код для сортировки с двойным включением по возрастанию на C++?

Сортировка двоичным включением - C++
У меня задание продемонстрировать в виде таблицы алгоритм роботы сортировки с двоичным включением на массиве 15,4,10,8,6,9,16,1.Написал...

Сортировка массива простым включением - C++
Есть псевдодинамический массив, надо отсортировать простым включением (Сортировка вставками) const int ArrayMAX = 100;// Константа...

Сортировка односвязного циклического списка (Прямым включением) - C++
Привет всем:) Мне требуется отсортировать односвязный циклический список, методом: прямое включение. Суть сортировки я понимаю, массив...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2014, 03:01
Привет! Вот еще темы с ответами:

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением - Pascal
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента массива. 2)Задан массив AX (N). Добавить...

Сортировка включением - Turbo Pascal
Задан массив X (N). Добавить массив С(М). Выполнить сортировку включением. В полученном массиве поменяйте местами наибольший и наименьший...

Сортировка включением - Turbo Pascal
Задан массив А (N). Добавить массив С(К). Выполнить сортировку включением. В полученном массиве определите количество элементов, которые...

Неполадка с включением ПК - Компьютерное железо
С недавнего времени заметил следующее - выключаю комп, и если после этого не отключая его от питания пытаюсь его включить - зависает на...


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

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

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