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

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

Восстановить пароль Регистрация
 
Rosenroot
2 / 2 / 0
Регистрация: 21.12.2013
Сообщений: 23
Завершенные тесты: 2
31.05.2014, 03:01     Девевья. Поиск с включением #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
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;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 03:01     Девевья. Поиск с включением
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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