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

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

Восстановить пароль Регистрация
 
malishhh
1 / 1 / 0
Регистрация: 05.05.2012
Сообщений: 29
08.06.2012, 18:05     Подправить программу( конкретно сделать ввод с клавы вместо обычно) #1
есть готовая программа которая выводит дерево методом вставки в лист ,и затем показывает его обратный обход.
необходимо исправить ,чтобы дерево выводилось с клавиатуры
#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++ ввод букв вместо цифр
Сделать программу более компактной + Ручной ввод размерности квадратной матрицы. C++
помогите подправить программу C++
Подправить программу C++
C++ Подправить программу
Написать простую программу на С++ с двумерным массивом, чтобы ввод осуществлялся с клавы и вывод полученной матрицы C++
C++ Подправить программу на миссивы, си++
C++ Ввод с клавы размера целочисленной матрицы, а затем самой матрицы. Найти наибольший элемент. Разрешается использовать только один оператор цикла

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

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

Текущее время: 13:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru