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

Высота n-нарного дерева - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Упорядочить последовательность методом простого выбора по фамилиям жителей. http://www.cyberforum.ru/cpp-beginners/thread269022.html
Разработать объект-вектор. В файле хранятся сведения о жителях некоторой улицы: фамилия, адрес, год рождения. Все сведения записываются в памяти в виде последовательности. Вводится некоторая...
C++ Строка в С++ Дана строка в с++. Как вывести все слова , которые содержат заданную букву? http://www.cyberforum.ru/cpp-beginners/thread269021.html
C++ Числа
Дано натуральное число. Верно ли, что нет в нем цифр a.
Указатели C++
Здравствуйте. Прошу ответить на мои вопросы: 1)Как понять, когда именно нужно использовать указатели? Т.е. когда без них невозможно. 2)Это вопрос уже к про). Даже не знаю, как его сформулировать....
C++ Передать двумерный массив в функцию http://www.cyberforum.ru/cpp-beginners/thread268981.html
подскажи те как передать двумерный массив в функцию?)
C++ Файлы Здоров Всем !! Мне нужно переписать из одного файла в другой до одноcтрочного комм.Как изменить? Пример : Это лежит в файле (text) : adaaww//wddd ... подробнее

Показать сообщение отдельно
KateHamgeN
0 / 0 / 0
Регистрация: 25.09.2009
Сообщений: 15

Высота n-нарного дерева - C++

02.04.2011, 21:36. Просмотров 857. Ответов 1
Метки (Все метки)

Подскажите алгоритм нахождения высоты n-нарного дерева, я написала, но высота находится не всегда точно. Не знаю как избежать этого.
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
struct tree
    {
        int k; //элемент дерева
        int kol_child; //количество потомков
        tree **child;
    };
    tree *root=NULL; //корень дерева
    int *n=new int[5]; //допустим пять ветвей в дереве
    for (int i=0;i<5;i++)
        n[i]=0;
    cout<<visota_root(root,n,0);
 
int visota_root (tree *p,int *n,int i)
{
    if  (!p) 
        return (0); 
    else
    {   
        for (i=0;i<p->kol_child;i++)
                n[i]=visota_root(p->child[i],n,i);
        if (n[i]>=n[0])
            return (n[i]+1);
        else
            return (n[0]+1);
 
    }       
}
Добавлено через 12 минут
еще вот так пробовала, но безполезно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int visota (tree *p,tree *p_root,int n,int m) 
{
    if  (!p) 
        return (0); 
    else
    {   
        for (int i=0;i<p->kol_child;i++)
        {
            m=i+1;
            n=visota(p->child[i],p_root,n,m);
        }
        if (p==p_root || m==1 || n==0)
            return (n+1);
        else 
            return (n);
    }       
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru