Форум программистов, компьютерный форум 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
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
08.11.2012, 19:33  [ТС]     Составить поисковое дерево
Цитата Сообщение от MrGrig Посмотреть сообщение
Сообщение от bootleanC Код C++1
goto topr; использование этого оператора это 95% то что программист что-то криво сделал и вставил костыль.
и вообще использование его является по большей части плохим тоном, нас обычно за такое преподы линейкой по рукам били, не в прямом смысле конечно, но все же =)
а как сделать более правильнее чтобы массив генерировался автоматически (трехзначные числа) и при этом не было повторений?

Добавлено через 54 минуты
Вот решил сделать по другому немного но теперь ругается на root в 38 и 39 строке
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
// lab2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
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);
//-----------------------------------------------------
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)search_insert(root,mas1[i]);
    print_tree(root,0);
    _getch();
    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) std::cout <<"   ";
        std::cout << p->d <<std::endl;                  //вывод корня поддерева
        print_tree(p->right, level + 1);      //вывод правого поддерева
    }
}
Добавлено через 48 минут
все сделал забыл строчку перед циклом добавить в майн
C++
1
    Node *root =first(mas1[0]);
Добавлено через 18 минут
возник другой вопрос: как сделать так чтобы программа вывела в строчку с начало элементы левого поддерева потом корень и потом правое поддерево?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru