1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Дерево

Тема в разделе "С и С++", создана пользователем Hanja, 9 ноя 2014.

  1. Hanja

    Hanja New Member

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

    В данный момент у меня есть программа, которая создает и выводит на экран небинарное дерево. Мне нужна помощь в переделке программы для решения моей задачи.
    Код:
    #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;
    
    
    }
     
Загрузка...

Поделиться этой страницей