Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2011, 15:36   #1
sibguty
Пользователь
 
Аватар для sibguty
 
Регистрация: 09.12.2011
Сообщений: 13
По умолчанию Двоичные деревья.

этот код размещает в памяти определенное дерево, нужно найти размер этого дерева.

//объявление структуры на первую вершину
struct Vertex
{ int data;
Vertex *L;
Vertex *R;
}tree1;
int main (void)
//объявление указателя на структуру и новых экземпляров структуры Vertex
{ struct Vertex *pVertex1;
struct Vertex tree2, tree3, tree4, tree5, tree6;

//инициализация указателя
pVertex1 = &tree1;


tree1.data = rand()%100; //заполнение полей первой вершины
tree1.L = &tree2;
tree1.R = &tree3;

tree2.data = rand()%100; //заполнение полей второй вершины
tree2.L = NULL;
tree2.R = NULL;

tree3.data = rand()%100;//заполнение полей третьей вершины
tree3.L = &tree4;
tree3.R = NULL;

tree4.data = rand()%100; //заполнение полей четвертой вершины
tree4.L = &tree5;
tree4.R = &tree6;

tree5.data = rand()%100;
tree5.L = NULL;
tree5.R = NULL; //заполнение полей пятой вершины

tree6.data = rand()%100; //заполнение полей шестой вершины
tree6.L = NULL;
tree6.R = NULL;

getch();
}

Дан алгоритм на псевдокоде: определение размера дерева.
p - указатель на (структуру) вершину дерева

IF (p =NIL) размер:=0
ELSE размер:=1 + размер(p->Left) + размер(p->Right)
FI

подскажите, пожалуйста, как это будет выглядеть на с++, не могу никак понять.

Последний раз редактировалось sibguty; 09.12.2011 в 15:44.
sibguty вне форума Ответить с цитированием
Старый 09.12.2011, 15:55   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
int count(Vertex *p)
{
    if (p == NULL)
        return 0;
    return count(p->Left) + count(p->Right) + 1;
}
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 09.12.2011, 17:43   #3
sibguty
Пользователь
 
Аватар для sibguty
 
Регистрация: 09.12.2011
Сообщений: 13
По умолчанию

а где можно оставить отзыв? еще плохо здесь ориентируюсь
sibguty вне форума Ответить с цитированием
Старый 09.12.2011, 18:22   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от sibguty Посмотреть сообщение
а где можно оставить отзыв? еще плохо здесь ориентируюсь
весы под аватаром
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 09.12.2011, 18:56   #5
sibguty
Пользователь
 
Аватар для sibguty
 
Регистрация: 09.12.2011
Сообщений: 13
По умолчанию

я так понимаю, что эту функцию лучше считать в цикле, тк у меня в дереве 6 вершин?
sibguty вне форума Ответить с цитированием
Старый 09.12.2011, 19:03   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

ну, видимо, да.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 09.12.2011, 21:30   #7
sibguty
Пользователь
 
Аватар для sibguty
 
Регистрация: 09.12.2011
Сообщений: 13
По умолчанию

ну это в том случае, если я знаю количество вершин, тогда существование этой функции становится бессмысленным, а если я не знаю размера дерева и мне надо его узнать, как тогда ??? Как заставить программу пройти по всем вершинам?
sibguty вне форума Ответить с цитированием
Старый 09.12.2011, 23:57   #8
J.B.DiGriz
Пользователь
 
Регистрация: 08.12.2011
Сообщений: 45
По умолчанию

Код:
int sum = 0;
int PrintTree(Node* node, int level)
{
	if (node)
	{
		PrintTree(node->left, level+1);
		sum++;
		PrintTree(node->right, level+1);
	}
}
Не знаю, правильно ли будет работать, но по идеи по окончанию выполнения функции в sum будет то, что нужно - вобщем попробуй так...
J.B.DiGriz вне форума Ответить с цитированием
Старый 10.12.2011, 12:42   #9
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от sibguty Посмотреть сообщение
ну это в том случае, если я знаю количество вершин, тогда существование этой функции становится бессмысленным, а если я не знаю размера дерева и мне надо его узнать, как тогда ??? Как заставить программу пройти по всем вершинам?
Зачем тебе проходить по всем вершинам?
У тебя есть дерево, в нем есть некоторое количество вершин.
В функцию ты передаешь указатель на вершину и функция считает количество узлов, начиная с этой вершины. Передашь ссылку на корневую вершину -- посчитает общее количество.
Сама посчитает. Она рекурсивная.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 10.12.2011, 16:00   #10
sibguty
Пользователь
 
Аватар для sibguty
 
Регистрация: 09.12.2011
Сообщений: 13
По умолчанию

ошибку выдает в этой строке
else return ((p->L) + (p->R) + 1);
(invalid operands of types 'Vertex*' and 'Veretex*' to binary 'operator+')
sibguty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двоичные деревья Raz0r Помощь студентам 7 11.12.2011 10:32
Двоичные деревья на Pascal-е seo-romka Помощь студентам 2 28.04.2011 17:58
Двоичные деревья (паскаль). patisson74 Помощь студентам 2 16.11.2010 23:46
Двоичные деревья. Maksik Помощь студентам 1 22.06.2010 21:57
Двоичные деревья в Паскале Paulo Помощь студентам 0 25.06.2009 23:31