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

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

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

Подправить программу( конкретно сделать ввод с клавы вместо обычно) - C++

08.06.2012, 18:05. Просмотров 272. Ответов 0
Метки нет (Все метки)

есть готовая программа которая выводит дерево методом вставки в лист ,и затем показывает его обратный обход.
необходимо исправить ,чтобы дерево выводилось с клавиатуры
#include <iostream>
#include <string>
#include <STDLIB.H>
#include <stdio.h>
#include <time.h>
#include <fstream>

using namespace std;
struct node {//создоем узел дерева поле с значением указателями на возможные дочернии узлы
int data;
struct node *link[2];
};

struct tree {
struct node *root;//дерево состояшее из созданых ранее узлов
};

struct node *make_node(int dt){//функция заполняеет созданый узел значением и задает пустые указатели
struct node *nod= new node;
nod->data = dt;
nod->link[0] = NULL;
nod->link[1] = NULL;
return nod;
}

int find (struct tree *tree, int data)//поиск элемента дерева
{
struct node *it = tree->root;//дублируем дерево

while (it != NULL) {//пока не добрались допустого элемента
if (it->data == data)
return 1;//возвращаем 1 при удачном случае
else {
int dir = it->data < data;//в обратном случаее в зависимости от числа перезаписываем в текуший узел левое или правое потдерево
it = it->link [dir];
}
}

return 0;
}

int insert (struct tree *tree, int data)//вставка
{
if (tree->root == NULL){//если нет дерева
tree->root = make_node (data);//создаем первый узел
}
else {//в обратном случае
struct node *it = tree->root;//дублируем дерево
int dir;

for ( ; ; ) {
dir = it->data < data;//сравниваем вставляемое число с значением в текушем узле

if (it->data == data)//если равен с текущим
return 0;//выходим
else if (it->link [dir] == NULL)
break;//если текуший узел не имеет потдерева выходим из бесконечного цыкла

it = it->link [dir];//сделали текущийм узлом подузел
}

it->link [dir] = make_node (data);//присваевеваем текушему узлу указатель на созданый лист
}

return 1;
}

void destroy_r (struct node *root)
{
if (root != NULL) {
destroy_r (root->link [0]);
destroy_r (root->link [1]);
free (root);
}
}

void destroy (struct tree *tree)//удаление дерева
{destroy_r (tree->root);
}


void postorder_r (struct node *root)
{
if (root != NULL) {
postorder_r (root->link [0]);
postorder_r (root->link [1]);
printf ("%d\ ", root->data);
}
}
void postorder (struct tree *tree)
{
postorder_r (tree->root);
}

void structure_r (struct node *root, int level)
{
int i;

if (root == NULL) {
for (i = 0; i < level; i++)
putchar ('\t');
puts ("");
}
else {
structure_r (root->link [1], level + 1);

for (i = 0; i < level; i++)
putchar ('\t');
printf ("%d\n", root->data);

structure_r (root->link [0], level + 1);
}
}

void structure (struct tree *tree)
{
structure_r (tree->root, 0);
}

void main(){


tree derevo;
derevo.root=make_node(1);//создаем вершину

insert(&derevo,10);//добавляем сколько нужно элеиентов
insert(&derevo,0);//сделаешь это в цикле и с вводом с клавы
insert(&derevo,3);
insert(&derevo,12);
insert(&derevo,5);

structure(&derevo);//показывает структуру дерева(боком)

postorder(&derevo);//обратный обход дерева
destroy(&derevo);
cin.get();

}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2012, 18:05     Подправить программу( конкретно сделать ввод с клавы вместо обычно)
Посмотрите здесь:

Не могу разобраться как сделать ввод абонентов в программу из файла - C++
Есть код для реаоизации программы &quot;бибилотечный абонемент&quot;. Задание записано так: Разработать модель работы библиотечного абонемента....

Сделать программу более компактной + Ручной ввод размерности квадратной матрицы. - C++
Программу я написал. Но надо сделать программу еще более компактной. + Вопрос, как сделать так, чтобы n не было константой, т.е. его...

Подправить программу - C++
Помогите, пожалуйста, подправить программу. Задание следующее: Даны действительные числа a, b, c, d. Проверить возможность...

Подправить программу - C++
помогите, пожалуйста. программа работает только когда вводятся числа по условию от 3 до 9. когда вводишь больше 9, то программа...

Нужно подправить программу - C++
Нужно чтобы программа выводила сообщение &quot;такого элемента нет&quot; если указанной цифры нет в массиве. (массив упорядоченный). Заранее...

Подправить программу на миссивы, си++ - C++
Вопрос в тексте кода. Помогите, пожалуйста. #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream.h&gt; void main () { int i,...

Необходимо подправить программу - C++
я написал программу: #include &lt;iostream&gt; #include &quot;liquid.h&quot; #include &quot;SpNapitki.h&quot; using namespace std; void...

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

Распределение памяти (подправить программу) - C++
исправить: вывести на экран не номер строки с максимальным количеством положительных элементов, а саму строку. #include &lt;iostream&gt; ...

Подправить программу, где-то ошибся) - C++
Не выводит седловые точки #include&lt;conio.h&gt; #include&lt;stdio.h&gt; void main(void) { int i,j, a, imin, imax,m,n,max,min,f; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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