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

Двоичное дерево (операции вставка, удаление, поиск) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ создать нетипизированный файл http://www.cyberforum.ru/cpp-beginners/thread805460.html
создать нетипизированный файл, содержащий произвольную символьную информацию. создайте на базе этого файла не типизированый отсортированный по возрастанию кодов символов файл пожалуйста решите очень нужно код в С++
C++ Защита от переполнения Ребят помоги создать защиту от переполнения через функцию scanf_s и убрать нолики в конечном ответе, вот код: #include <stdio.h> #include <iostream> int main () { setlocale(0, "rus"); float b, h, s; printf("Введите значение длины основания: "); while (!scanf("%f", &b) || getchar() != '\n') { http://www.cyberforum.ru/cpp-beginners/thread805455.html
C++ дан файл целых чисел, содержащий четное количество элементов. удалить из файла вторую половину элементов
дан файл целых чисел, содержащий четное количество элементов. удалить из файла вторую половину элементов, очень нужен код в С++ помогите пожалуйста:cry:
C++ Дан массив размера N и два целых числа K и M (1 ≤ K ≤ N, 1 ≤ M ≤ 10)
Дан массив размера N и два целых числа K и M (1 ≤ K ≤ N, 1 ≤ M ≤ 10). Перед элементом массива с номером K вставить M новых элементов с нулевыми значениями. нужен код С++ пожалуйста решите, оооочень надо:gcray:
C++ Преобразовать строку s в верхний регистр и переписать результат в строку S1 http://www.cyberforum.ru/cpp-beginners/thread805434.html
дана строка s в нижнем регистре. преобразовать строку s в верхний регистр и переписать результат в строку S1. Вывести строку S1 на экран. Пожалуйста решите, нужен код в С++ я в нем ничего не понимаю(((
C++ Описание класса с именем TRAIN Задание 1: Описание класса. Запишите описание класса с именем TRAIN, содержащего следующие поля: 1)название пункта назначения; 2)номер поезда; 3)время отправления. Скройте элементы-данные от пользователя, предоставив интерфейс доступа к полям посредством открытых методов (предусмотрите объявление двух методов, один из которых присваивает значения полям класса, а другой – выводит... подробнее

Показать сообщение отдельно
skMaster
3 / 3 / 2
Регистрация: 26.02.2013
Сообщений: 38
11.03.2013, 13:42     Двоичное дерево (операции вставка, удаление, поиск)
Вообщем пытаюсь научиться работать с двоичными деревьями.
Информацию беру с википедии: ru.wikipedia.org.
Пока пытаюсь реализовать функцию вставки нового узла в дерево по алгаритму:
Дано: дерево Т и ключ K.
Задача: добавить ключ K в дерево Т.
Алгоритм:
Если дерево пусто, заменить его на дерево с одним корневым узлом (K, null, null) и остановиться.
Иначе сравнить K с ключом корневого узла X.
Если K<X, рекурсивно добавить K в левое поддерево Т.
Если K>=X, рекурсивно добавить K в правое поддерево Т.

Начал делать вот так:
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
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <time.h>
 
using namespace std;
 
struct usel{
    int x;
    usel *left;
    usel *right;
};
 
usel *newUsel(int k){
    usel *t = new usel;
    t->left=NULL;
    t->right=NULL;
    t->x=k;
    return t;
};
 
void Insert(usel *t, int k)
{
    if(t==NULL)
    {
        cout<<"Записываем"<<endl;
        t=newUsel(k);
    }
    else if(k<t->x)
    {
        cout<<"Идем влево ";
        Insert(t->left,k);
    }
    else
    {
        cout<<"Идем вправо ";
        Insert(t->right,k);
    }
}
 
int main(){
    setlocale(LC_ALL, "Russian");
    usel *t = newUsel(50);
    srand(time(0));
    for(int i=1; i<99; i++)
    {
        int k = 1 + rand()%98;
        cout<<"Вставляем "<<k<<": ";
        Insert(t, k);
    }
    _getch();
    return 0;
}
Тоесть создаю корневой узел t с ключем 50 (среднее из моих значений, чтобы болеменее наглядно было), далее добавляю 99 узлов рандомно из промежутка [1,99]. Но такая фигня получается, программа тупо сравнивает их все с корнем и записывает в левую либо в правую ветку, не углубляясь при этом. Тоесть когда функцию Insert рекурсивно вызываю, она почемуто считает что дочерние ветки=NULL. В си++ я чайник такчто прошу сильно не пинать)
Пробовал и дерево с NULL корнем делать, такаяже фигня выходит( Подскажите пожалуйста, где я ошибся?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru