Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Построение сбалансированного дерева из файла (С++)

440
31 марта 2011 года
[FENIX]
83 / / 29.01.2007
Народ, помогите пожалуйста, нужно написать функции:

Node * CreateBalansedTree(char * fname); – функция создает сбалансированное бинарное дерево. Функция вначале открывает файл, читает первую строку (имя узла) и создает корневой узел. Далее для всех оставшихся строк из файла вызывает функцию:
void AddNode(Node * node, char * name);

AddNode добавляет слева/справа дочерний узел, если у текущего узла нет дочерних узлов слева/справа, в противном случае выбирает дочерний узел у которого высота меньше (а если высоты равны то выбирает левый) и вызывает функцию AddNode() для выбранного узла.

Необходимо использовать функции Win32 API

Исходник (С++):



Код:
// Laba5_OS.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <string>
using namespace std;
//#include <iostream.h>


//Узел бинарного дерева

int count;
char S[50];
struct Node
{
    char value; //значение узла
    Node * left;        //левая ветвь
    Node * right;       //правая ветвь
   
    //Конструктор структуры
    Node() {
        left = right = NULL;
    }

    Node(char x)
    {
        value=x;
        left = right = NULL;
    }

};

int ascii_cod(char x)
{
    int a;
    a = x;
    return a;
}

//левосторонний алгоритм обхода дерева, и вывывод узлов на экран
void LKP(Node* pointer)
{
    if(pointer!=NULL)
    {
        LKP(pointer->left);
        printf("%c ",pointer->value);
       
        LKP(pointer->right);
    }
}


void AddNode(Node * pointer, char  name)
{
   

    if (pointer->left == NULL) {
            pointer->left = new Node(name);
        } else
        if (pointer->right == NULL) {
 
            pointer->right = new Node(name);
        } else {
            AddNode(pointer->left, name);
           
           
        }
   
}


//Создание сбалансированного дерева
//Я добавил параметр Node* pointer, т.к. не знаю, как без него обойтись
Node* createBalanced(char * fname, Node* pointer) {

    FILE *fp;


    //действия, если файл не открылся
    if ((fp = fopen(fname, "r")) == NULL)
    {
        puts("File not found\n");
        fclose(fp);
        return NULL;
       
    }
    else
    {
        //действия, если файл существует
        //char S[50];
        fgets(S, 50, fp);//В S считываем содержимое файла
        int count1=0;

        while(  ascii_cod(S[count1]) > 0 )
        {
            printf("%d\n", ascii_cod(S[count1]) );
            count1++;
        }


        if(pointer==NULL)
            pointer=new Node(S[0]);
        else
        {
            AddNode(pointer->left,S[1]);
        }
       


        //count=count1;
       

        fclose(fp);
        return pointer;
    }

   
}


void _tmain(int argc, _TCHAR* argv[])
{

    //Открытие файла. Если файла нет, он создаётся
    //HANDLE fp = CreateFile ("Tree.txt", GENERIC_WRITE && GENERIC_READ, 0, NULL, /*CREATE_ALWAYS*/CREATE_NEW, 0, NULL);

    Node * root = NULL;
    //root=openFile("Tree.txt");

   
    root=createBalanced("Tree.txt", root);



    //printf("\n\n\n %d\n",count);
   

    LKP(root);
   
    int b;
    scanf("%d",&b);

    //CloseHandle(fp);
   
}


Дерево только вот я нормально создать пока не моогу (.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог