Форум программистов, компьютерный форум, киберфорум
Наши страницы

Двоичное дерево (операции вставка, удаление, поиск) - 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,... 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 новых элементов с нулевыми значениями. нужен код С++ пожалуйста решите, оооочень...
C++ Преобразовать строку s в верхний регистр и переписать результат в строку S1 http://www.cyberforum.ru/cpp-beginners/thread805434.html
дана строка s в нижнем регистре. преобразовать строку s в верхний регистр и переписать результат в строку S1. Вывести строку S1 на экран. Пожалуйста решите, нужен код в С++ я в нем ничего не...
C++ Описание класса с именем TRAIN Задание 1: Описание класса. Запишите описание класса с именем TRAIN, содержащего следующие поля: 1)название пункта назначения; 2)номер поезда; 3)время отправления. Скройте элементы-данные... подробнее

Показать сообщение отдельно
skMaster
4 / 4 / 2
Регистрация: 26.02.2013
Сообщений: 39
Завершенные тесты: 1

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

11.03.2013, 13:42. Просмотров 1039. Ответов 2
Метки (Все метки)

Вообщем пытаюсь научиться работать с двоичными деревьями.
Информацию беру с википедии: 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 корнем делать, такаяже фигня выходит( Подскажите пожалуйста, где я ошибся?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru