Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Yan Chenrysh
0 / 0 / 0
Регистрация: 12.05.2017
Сообщений: 33
1

Создать зеркальное дерево к заданному дереву

06.06.2018, 23:42. Просмотров 292. Ответов 1
Метки нет (Все метки)

Вообщем есть дерево нужно создать зеркальное дерево, и найти самое большое поддерево дерева.
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
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <locale.h>
#include <stdio.h>
struct TNode
{
    int info; 
    struct TNode *left, *right;
};
typedef struct TNode Node;
void push(Node **t, int a)
{
    if (*t == NULL) 
    {
        *t = (Node*)malloc(sizeof(Node)); 
        (*t)->info = a; 
        (*t)->left = (*t)->right = NULL; 
            return;
    }
    
    if (a>(*t)->info) push(&((*t)->right), a); 
    else push(&((*t)->left), a); 
}
void printTree(Node *p, int level) 
{
    if (p) 
    {
        printTree(p->right, level + 1); 
            for (int i = 0; i< level; i++) printf(" ");
        printf("%d\n", p->info);
        printTree(p->left, level + 1); 
    }
}
int main()
{
    setlocale(LC_ALL, "rus");
    Node * tree = NULL;
    int n; 
    int s;
    printf("Введите количество элементов дерева ");
    scanf("%i", &n);
    for (int i = 0; i<n; ++i)
    {
        printf("Введите информацию ");
        scanf("%i", &s); 
        push(&tree, s); 
    }
    printf("Полученное дерево\n");
    //showTree(tree);
    printTree(tree, 0);
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2018, 23:42
Ответы с готовыми решениями:

По заданному дереву построить новое дерево только из тех элементов данного дерева, которые оканчиваются на 7
Пожалуйста, помогите. Уже весь мозг себе сломала. Т-Т Есть задание - &quot;Напишите функцию, которая по...

Двоичное дерево, Поиск по дереву
Здравствуйте Форумчане, переписывал прогу раза 4 и все одна и та же ошибка помогите пожалуйста! В...

Реализовать программу, создающую AVL дерево. Функции добавления узлов и поиск по дереву
Неодходимо реализовать программу, создающую AVL дерево. Функции добавления узлов и поиск по дереву....

Создать поиск по дереву
Доброго времени суток. Помогите сделать поиск по дереву. Из программы, которую я выложил надо...

Создать навигатор по генеалогическому дереву
как сделать Генеалогическое дерево Задание: создать навигатор по генеалогическому дереву со...

1
Геомеханик
805 / 608 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
08.06.2018, 05:42 2
Цитата Сообщение от Yan Chenrysh Посмотреть сообщение
создать зеркальное дерево
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
typedef struct node {
    struct node* right, *left;
    int info;
} node_t;
 
int  tree_insert(node_t** tr, int info);
void tree_clear(node_t* tr);
void tree_build(node_t** dst, const node_t* src);
void tree_print(FILE* _out, const node_t* tr);
 
int main(void){
    unsigned i;
    int   arr[] = { 5, 3, 7, 9, 4, 2, 0, 1, 8, 6 };
    node_t* tr1 = NULL, *tr2 = NULL;
    
    for(i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i)
        tree_insert(&tr1, arr[i]);
 
    tree_print(stdout, tr1);
    putchar('\n');
 
    tree_build(&tr2, tr1);
    tree_print(stdout, tr2);
 
    tree_clear(tr1);
    tree_clear(tr2);
    getchar();
    return 0;
}
 
//построение зеркального дерева
void tree_build(node_t** dst, const node_t* src){
    node_t* p;
    if(src != NULL){
        if((p = (node_t*)malloc(sizeof(node_t))) == NULL)
            return;
 
        p->left = p->right = NULL;
        p->info = src->info;
        *dst = p;
 
        if(src->left != NULL)
            tree_build(&(*dst)->right, src->left);
 
        if(src->right != NULL)
            tree_build(&(*dst)->left, src->right);
    }
}
 
//вставка
int tree_insert(node_t** tr, int info){
    node_t* p = *tr;
    while(p != NULL){
        if(info < p->info){
            tr = &p->left;
            p  = p->left;
        } else if(info > p->info){
            tr = &p->right;
            p  = p->right;
        } else
            return 0;
    }
 
    if((p = (node_t*)malloc(sizeof(node_t))) != NULL){
        p->left = p->right = NULL;
        p->info = info;
        *tr = p;
    }
    return (p != NULL);
}
 
//удаление всех
void tree_clear(node_t* tr){
    if(tr != NULL){
        if(tr->left != NULL)
            tree_clear(tr->left);
        if(tr->right != NULL)
            tree_clear(tr->right);
        free(tr);
    }
}
 
//печать
void tree_print(FILE* _out, const node_t* tr){
    if(tr != NULL){
        if(tr->left != NULL)
            tree_print(_out, tr->left);
 
        fprintf(_out, "%d ", tr->info);
 
        if(tr->right != NULL)
            tree_print(_out, tr->right);
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2018, 05:42

Есть мин-ое остовое дерево к заданному графу. Нужно добавить к этому графу новое ребро, и предложить алгоритм, который перестроит мин-е остовое дерево
Полный текст задачи: &quot;Предположим, что у нас имеется минимальное остовое дерево Т заданного графа G...

По заданному символу построить дерево
Дан символ a(T)=(3,14,14,14,5,11,11,10,10,1,1,1,2) Нужно построить дерево. Как это сделать? В...

По заданному значению построить красно-черное дерево
По заданным значениям { 6, 14, 12, 1, 40, 20 ,16 ,22, 26, 30} постройте красно-черное дерево По...


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

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

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