Дерево

Hanja

New member
09.11.2014
1
0
#1
Имеется следующая задача:
Трассировка программы, не содержащей рекурсивных
вызовов и повторяющихся имен процедур, распечатана в виде
списка выполняемых процедур. Процедура попадает в список, если
к ней произошло обращение из вызывающей процедуры либо возврат
управления из вызванной ей процедуры. Структура программы
такова, что каждая вызываемая процедура вложена в вызывающую
ее процедуру. Начало и окончание программы должны быть в
головной процедуре. Известен объем памяти, который требуется
для загрузки каждой процедуры. При выходе из процедуры
занимаемая ей память освобождается. Построить и выдать дерево
вызовов процедур. Определить размер памяти, необходимый для
работы программы, и цепочку вызовов, требующую максимальной
памяти.

В данный момент у меня есть программа, которая создает и выводит на экран небинарное дерево. Мне нужна помощь в переделке программы для решения моей задачи.
C++:
#include <iostream>

#include <stdlib.h>

using namespace std;

//using namespace system

struct Tree {

int id; //уникальное значение

int level; //уровень в иерархии

int count_son; //количество сыновей

struct Tree** son; //массив указателей на сыновей

};

/*---------Создание дерева----------*/

struct Tree *createTree(struct Tree *node, int id, int level){

//node = new Tree;

node->id = id;

node->level = level;

cout << "\nKol. sons (" << (node->level) << "-" << (node->id) << "): ";

cin >> (node->count_son);

node->son = new struct Tree *[node->count_son];



level++;

for(int i = 0; i < ( node->count_son); i++){

node->son[i] = new Tree;

node->son[i]->id = id + i;

node->son[i]->level = level;

}

for(int i = 0; i < (node->count_son); i++)

createTree(node->son[i], id + i, level);

return node;

}

/*---------Вывод дерева----------*/

void printTree(struct Tree *node){

if(node){

for(int i = 0; i < (node->level); i++)

cout << "| ";

if(node->son != NULL)

cout << "[+]";

cout << "(" << (node->level) << "-" << (node->id) << ")" << endl;

if((node->count_son) != 0)

for(int i = 0; i < (node->count_son); i++)

printTree(node->son[i]);

}

}



int main()

{

Tree *root;

root = new Tree;

root = createTree(root, 0, 0);

printTree(root);
system("pause"); 
return 0;


}