С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 21.12.2013
Сообщений: 23
1

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

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

Author24 — интернет-сервис помощи студентам
Программа формирует дерево из массива целых чисел и выводит его на экран.
Кликните здесь для просмотра всего текста
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2014, 03:01
Ответы с готовыми решениями:

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

Сортировка включением.
Сортировка включением. Заданный одномерный массив отсортировать по возрастанию цифры десятков...

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

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

0
31.05.2014, 03:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2014, 03:01
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru