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

Составить поисковое дерево - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ итераторы вектора http://www.cyberforum.ru/cpp-beginners/thread690176.html
#include <tchar.h> #include <iostream> #include <vector> using namespace std; int _tmain(int argc, _TCHAR* argv) { vector <int> a; vector <int>::iterator cur; int itemp; int i;
C++ пропукае ввод строки Почему в этой программе пропускает ввод строки? gets(s); #include <iostream> #include <string.h> #include <conio.h> #include <stdio.h> const int n=10; http://www.cyberforum.ru/cpp-beginners/thread690157.html
C++ Заменить в строке все вхождения abc на 123
Попросили сделать простейшую программку (по информатике), вроде как шарю, но сейчас просто не могу понять, что происходит и почему не работает, перепробовал уже вариантов 10, ничего не помогает. Возникают различные ошибки. Исходное задание: считать строку и заменить все вхождения abc на 123. В коде ниже не считывается переменная строки scanf'ом. #include "stdafx.h" #include <string.h>...
Заполнить массив следующим образом C++
Помогите (очень нужно) на завтра. Создать одномерный массив (можно на 10 элементов) и заполнить его следующим образом: 1, 2, 1, 2, 1, 2 ... и так далее. Элементы массива не вводить а все сделать в коде программе.
C++ Раздвинуть заданный текст, вставив заданную последовательность http://www.cyberforum.ru/cpp-beginners/thread690138.html
Раздвинуть заданный текст, вставив заданную последовательность после i-го символа каждого слова.
C++ Найти в массиве все повторяющиеся последовательности Создать программу, которая вводит c клавиатуры массив целых чисел, находит в нем все повторяющиеся последовательности (1 1, 2 2 2 и т.д.) и заменяет каждую из них на два элемента: повторяющееся число и длину последовательности. Выдать результирующую последовательность и пары "длина - число последовательностей данной длины" вход: 1 1 1 2 2 2 2 3 4 4 4 5 5 5 выход: 1 3 2 4 3 4 3 5 3 1 - 1 2 -... подробнее

Показать сообщение отдельно
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
06.11.2012, 18:30     Составить поисковое дерево
Короче программа должна из случайно сформированного массива mas1, составить поисковое дерево(то бишь программа должна сделать так чтобы в верху был наименьший элемент далее с ссылкой на соседние элементы вниз по уровням)вот примерно как на рисунке

Название: 9749_original.png
Просмотров: 226

Размер: 14.7 Кб
и надо как то вывести это красиво. чтобы было понятно что это дерево. либо вертикально либо горизонтально(когда самый левый это корень дерева)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// lab2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
class tree
{
 
private: struct node
    {
        int info;
        node *left, *right;
    };
public:
    node *pn;
    /*создание нового узла*/
    node *new_node(int x);
    /*добавление узла к дереву*/
    node *add_node(int x, node *pn);
    /*обход дерева в симметричном порядке*/
    void print_sim(node *pn);
    /*удаление всего дерева*/
    void del_tree(node *pn);
    tree();
    ~tree();
}t;
int _tmain(int argc, _TCHAR* argv[])
{
    const int n=18;
    int mas1[n];
    srand(static_cast<unsigned>(time(NULL)));
    mas1[0] = rand()%901+100;
    for(int i=1; i<n; ++i)
        {
            mas1[i] = rand()%901+100;
            for(int j=1; j<=i; ++j)
                topr:if(mas1[i]==mas1[i-j])
                {
                    mas1[i] = rand()%901+100;
                    goto topr;
                }
        }
    std::cout<<"Ishodnii massiv"<<'\n';
    for(int i=0; i<n; ++i)
        std::cout<<i<<"   "<<mas1[i]<<'\n';
    for(int i=0;i<n;++i)
        t.pn=t.add_node(mas1[i],t.pn);
    for(int i=0;i<n;++i)
        t.print_sim(t.pn);
 
    _getch();
    return 0;
}
tree::tree()
{
    pn=NULL;
}
tree::~tree()
{
    del_tree(pn);
}
tree::node *tree::new_node(int x)
{
    node *ptr;
    ptr=new node;
    ptr->info = x;
    ptr->left=ptr->right=NULL;
    return ptr;
}
tree::node *tree::add_node(int x,node *pn)
{
    node *ptr=pn;
    //Если дерево не существует, то созаем его.
    if(pn==NULL) return new_node(x);
    //Если добавляемое значение меньше информационного поля узла, то
    if(x<pn->info)
        add_node(x,pn->left);
    //Добавляем его в левре поддерево, иначе - в правое
    else
        add_node(x,pn->left);
    return ptr;
}
void tree::print_sim(node*pn)
{
    //Если левое поддерево существует, то обходим его.
    if(pn->left)
        print_sim(pn->left);
    std::cout<<pn->info<<" ";
    //Попадаем в корень.
    //Если существует правое поддерево, то обходим и его.
    if(pn->right)
        print_sim(pn->right);
}
void tree::del_tree(node* pn)
{
    //Если левое поддерево существует,удаляем его.
    if(pn->left)
        del_tree(pn->left);
    //Если существует правое поддерево, его тоже удаляем.
    if(pn->right)
        del_tree(pn->right);
    //Удаляем корень.
    delete pn;
}
очень прошу помочь...хотя бы помогите понять где я допускаю ошибку ведь программа выводит только первый элемент дерева...как будто происходит зацикливание
Составить поисковое дерево
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru