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

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

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

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

08.06.2012, 18:05. Просмотров 279. Ответов 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();

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

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

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

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

Модифицируйте, пожалуйста, программу так, чтобы вместо 0 выводилось “false”, а вместо 1 – ”true” - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { bool y, x; bool sq={ {0,0}, {0,1}, ...

Нашел в схожей теме не могу понять в чем ошибка. Кроме того как конкретно сделать что были високосные года? - C++
Пользователь вводит две даты (день, месяц, год в виде целых чисел). Необходимо определить и вывести количество дней между этими двумя...

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2012, 18:05
Привет! Вот еще темы с ответами:

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

Как написать программу на С++, чтобы можно было вводить матрицу с клавы и в итоге она появилась на экране? - C++
#include&lt;iostream&gt; using namespace std; int main() { int n,m; cout&lt;&lt; &quot; Vvedite razmer: &quot;&quot;\n&quot;; cin&gt;&gt;n&gt;&gt;m; int *a=new int; ...

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

Ввод данных с клавы в переменную - C#
Что я делаю не так? using System; using System.Collections.Generic; using System.Linq; using System.Text; using...


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

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

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