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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
#1

Деревья - C++

09.12.2013, 21:27. Просмотров 524. Ответов 1
Метки нет (Все метки)

Всем добрый день!
Имеется такое задание :
а) вставляет узел с записью Е в дерево, если ранее такой не было;
b) удалить ее, если она уже существует.
Также есть функции, которые добавляют звенья в дерево, обход и т.д.
Помогите, пожалуйста, с заданием. Спасибо.
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
//#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
struct derevo
{
    derevo *left,*rite; //левое и правое поддерево
    int x; 
};
 
/*ФУНКЦИЯ ДОБАВЛЕНИЯ ЗВЕНА В ДЕРЕВО*/
void dobav(int x,derevo *&zveno) //Функция добавления звена в дерево
{
    if (NULL==zveno)  // Если дерева нет, то создаем корень
    {
        zveno=new derevo; //Выделяем память под звено дерева
        zveno->x=x; //Записываем данные в звено
        zveno->left=zveno->rite=NULL; //Подзвенья инициализируем пустотой во избежание ошибок
    }
 
                   if (x<zveno->x)   //Если нововведенный элемент x меньше чем элемент x из корня дерева, уходим влево
                      {
                          if (zveno->left!=NULL) dobav(x,zveno->left); //При помощи рекурсии помещаем элемент на свободный участок
                          else //Если элемент получил свой участок, то
                          {
                              zveno->left=new derevo;  //Выделяем память левому подзвену. Именно подзвену, а не просто звену
                              zveno->left->left=zveno->left->rite=NULL; //У левого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
                              zveno->left->x=x; //Записываем в левое подзвено записываемый элемент 
                          }
                      }
                 
                    if (x>zveno->x)   //Если нововведенный элемент x больше чем элемент x из корня дерева, уходим вправо
                      {
                          if (zveno->rite!=NULL) dobav(x,zveno->rite); //При помощи рекурсии помещаем элемент на свободный участок
                          else //Если элемент получил свой участок, то
                          {
                              zveno->rite=new derevo;  //Выделяем память правому подзвену. Именно подзвену, а не просто звену
                              zveno->rite->left=zveno->rite->rite=NULL; //У правого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
                              zveno->rite->x=x; //Записываем в правое подзвено записываемый элемент 
                          }
                      }
        
}
 
/*ОБХОД В ПЯМОМ ПОРЯДКЕ (НИСХОДЯЩИЙ ОБХОД)*/
 void pram_ob (derevo *&svob)
{
    if (NULL==svob)    return;    //Если дерева нет, выходим
   
    printf("%d\n",svob->x); //Посетили узел
    pram_ob (svob->left); //Обошли левое поддерево
    pram_ob (svob->rite); //Обошли правое поддерево 
    
 
}
 
int main ()
{
    int x; //Некоторые данные
    derevo *zveno=NULL; //Указатель на нашу структуру. Инициализируем во избежание ошибок
 
  for (int i=0;i<7;i++) //В дереве будет 7 узлов
  {
      printf("X = "); scanf("%d",&x); //Ввели X с клавиатуры
      dobav(x,zveno); //Добавили X в дерево
  }
 
  pram_ob (zveno); //Обошли дерево и показали его звенья в линейном порядке
  getch();
return 0;}
Добавлено через 1 час 51 минуту

Добавлено через 2 часа 50 минут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2013, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Деревья (C++):

Деревья. - C++
Условие Найти и удалить (правым удалением), если существует, среднюю по значению из вершин дерева, у которых количество потомков в левом...

Деревья - C++
Написать программу, которая вводит с клавиатуры сбалансированное дерево и считает сумму элементов дерева.

деревья на С++ - C++
эта задачка на деревья.помогите пожалуйста...от этого зависит мой экзамен... В школе продолжительность каждого урока 45 минут, а перемены...

деревья - C++
Доброго дня всем. Подскажите плиз что не правильно, пытаюсь разобраться в деревьях и шаблонах. Есть 2 класса лист и дерево, по...

Деревья на с++ - C++
Задание: Напишите программу, содержащую процедуру или функцию, которая подсчитывает число вершин на каждом уровне непустого дерева...

Деревья - C++
Создать процедуру построения бинарного дерева на основе не бинарного. Заранее спасибо.

1
intnower
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 68
10.12.2013, 23:45  [ТС] #2
помогите, пожалуйста!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2013, 23:45
Привет! Вот еще темы с ответами:

деревья - C++
собственно написал программу на с++, которая выводит бинарное дерево. но почему на третьем узле ветки смещаются. и я никак не могу найти...

Деревья - C++
нужно переписать программу с C++ на C #include &lt;string&gt; #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;cassert&gt; enum...

Деревья - C++
Здравствуйте. Помогите разобраться с деревьями. Можно бинарное, можно не бинарное.

Деревья - C++
Помогите пожалуйста! нужно разработать программу для работы с деревом. В узлах дерева содержатся символы. Дерево должно быть...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru