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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
istro2009
Сообщений: n/a
#1

Нужно вывести на экран содержимое самой длинной ветки бинарного дерева - C++

15.05.2011, 11:37. Просмотров 1450. Ответов 2
Метки нет (Все метки)

Нужно вывести на экран содержимое самой длинной ветки бинарного дерева на c++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2011, 11:37     Нужно вывести на экран содержимое самой длинной ветки бинарного дерева
Посмотрите здесь:

C++ Вывести номер строки матрицы с самой длинной последовательностью одинаковых элементов
C++ Запись массива в виде бинарного дерева и вывод его на экран!
Запись бинарного дерева в файл и восстановление из него этого дерева C++
C++ Вывод бинарного дерева на экран в виде "дерева"
C++ Переделать функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки и воспроизводила ее
C++ Деревья С++ (функция, которая получает указатель на корень дерева и возвращает длину самой длинной ветки на дереве)
C++ Функция удаления листа (или ветки) бинарного дерева
Нужно найти длину самой длинной подпоследовательности, в которой равное количество 0 и 1. C++
Как вывести все листья бинарного дерева? C++
C++ Вывести размер самой длинной строки
Вывести разность значений всех листьев бинарного дерева C++
Вывести количество возрастающих последовательностей в массиве, а также длину самой длинной из них C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RaTeN
0 / 0 / 0
Регистрация: 14.11.2010
Сообщений: 10
15.05.2011, 17:14     Нужно вывести на экран содержимое самой длинной ветки бинарного дерева #2
есть у кого идеи?

Добавлено через 1 час 22 минуты
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
#include <conio.h>
#include <malloc.h>
#include <stdio.h>
#include <iostream.h>
 
 
 
struct DER 
{
    int data;
    struct DER *l, *r;
};
 
typedef struct DER *TREE;
 
 
TREE BuildTree(int n)
{ 
    TREE pt_tree;
    int new_el, nl, nr;
    if (n==0) 
    {
        pt_tree = NULL;
        return pt_tree;
    }
    nl = n/2; nr=n-nl-1;
    scanf("%d\n", &new_el);
    pt_tree = (TREE)calloc(1,sizeof(struct DER));
    pt_tree->data = new_el;
    pt_tree->l = BuildTree(nl);
    pt_tree->r = BuildTree(nr);
    return pt_tree;
}
 
void PrintTree(TREE pt_tree)
{
    int i;
    if(pt_tree != NULL)
    {
        PrintTree(pt_tree -> l);
        printf("%d\n",pt_tree -> data);
        PrintTree(pt_tree -> r);
    }
}
 
int main()
{
    TREE tree;
    int tree_el, i;
    tree = NULL;
    tree=BuildTree(7);
    PrintTree(tree);
    return 0;
}

вот что накидал... но это элементарно...
istro2009
Сообщений: n/a
18.05.2011, 16:19     Нужно вывести на экран содержимое самой длинной ветки бинарного дерева #3
Сделал))
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
#include <iostream>
#include<windows.h>
using namespace std;
 
struct point
{
    int data;           //информационное поле
    point *left;        //адрес левого поддерева
    point *right;       //адрес правого поддерева
};
 
point* Tree(int x, point *p)
{
    if(!p)
    {
        p=new point;
        p->left=NULL;
        p->right=NULL;
        p->data=x;
    }
 
    else
    {
        if(p->data>x)   {p->left=Tree(x, p->left);}
        else    {p->right=Tree(x, p->right);}
    }
    return p;
}
 
void Print(point *p, int l) 
{
    if(p)
    {
        Print(p->left,l+5);
        for(int i=0;i<l;i++)
            cout<<" ";
        cout<<p->data<<endl;
        Print(p->right,l+5);
    }
}
 
 
int maxim(int *mas, int *i)
{
    int n, min, t;
    min=mas[0];
    for(n=0;n<*i;n++)
        if(mas[n]>min)
        {
            min=mas[n];
            t=n;
        }
    return t;
}
 
 
 
int getlen(point* p, int level, int *k, int *mas, int *mas2, int *i)
{
 
    if (p->left) { getlen(p->left, level + 1, k, mas, mas2, i); }
    if (p->right) { getlen(p->right, level + 1, k, mas, mas2, i); }
 
    if ((!p->left) & (!p->right))
    {
        mas[*i]=p->data;
        mas2[*i]=level; 
        (*i)++;             
    }
    return mas[*i];
            
}   
 
 
 
void main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    const int t=5;
    int n,i=0, k, s, x, f;
    int mas[t], mas2[t];
    cout<<"Задайте количество элементов дерева\n";
    cin>>n;
    point *root=NULL;
    
    for(i=0;i<n;i++)
    {
        cout<<"элемент:";
        cin>>x;
        root=Tree(x, root); 
    }
    i=0;
    Print(root,0);      
    s=getlen(root, 1, &k, mas, mas2, &i);   
    cout<<"Элемент самой длинной ветки дерева: "<<mas[maxim(mas2, &i)]<<endl;
}
Yandex
Объявления
18.05.2011, 16:19     Нужно вывести на экран содержимое самой длинной ветки бинарного дерева
Ответ Создать тему
Опции темы

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