// 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);
}
Построение сбалансированного дерева из файла (С++)
Node * CreateBalansedTree(char * fname); – функция создает сбалансированное бинарное дерево. Функция вначале открывает файл, читает первую строку (имя узла) и создает корневой узел. Далее для всех оставшихся строк из файла вызывает функцию:
void AddNode(Node * node, char * name);
AddNode добавляет слева/справа дочерний узел, если у текущего узла нет дочерних узлов слева/справа, в противном случае выбирает дочерний узел у которого высота меньше (а если высоты равны то выбирает левый) и вызывает функцию AddNode() для выбранного узла.
Необходимо использовать функции Win32 API
Исходник (С++):
Код:
Дерево только вот я нормально создать пока не моогу (.