mishe ye barname ba derakht vasam befrestin
faghat derakhtesh dodoee nabashe
me30
faghat derakhtesh dodoee nabashe
me30

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define n 30 // Size of array
#define InputNumbers 9
#define FatherNode MinHeapArray[i]
#define LeftChild MinHeapArray[2*i]
#define RightChild MinHeapArray[2*i+1]
// Functions and Subroutines
int NewNumber();
int NeedToSort(int index, int NewNO);
int SortMinHeapTree(int index);
void PutToTree(int index);
void ShowTree();
// Variables
int MinHeapArray[n]={0}; // Define an array for tree
int idx=0;
int i; // For loops
/***********************************************************************/
int NewNumber()
{
unsigned int tmpNO;
printf("\n%d) Enter a number ['0' = Cancel]: ",idx+1);
scanf("%d", &tmpNO);
return tmpNO;
}
/***********************************************************************/
void main(void)
{
clrscr(); // Clear Screen
unsigned int tmpNewNO; // Temp variable to store new number
for (i=1; i<=InputNumbers; i++)
{
tmpNewNO=NewNumber();
if (!tmpNewNO) exit(0);
PutToTree(tmpNewNO);
if (NeedToSort(idx, tmpNewNO))
{
printf("\n>> SORTING...\n");
SortMinHeapTree(idx);
}
ShowTree();
}// for
SortMinHeapTree(idx);
printf("\n*** Final Result ***\n");
ShowTree();
printf("\nHit any key to exit....");
getch();
}
/***********************************************************************//***********************************************************************/
void PutToTree(int index)
{
MinHeapArray[++idx] = index;
}
/***********************************************************************/
int NeedToSort(int index, int NewNO)
{
//printf("\nIDX = %d\n", index);
int tmpIdx=index;
if (!tmpIdx)
return 0;
else if (tmpIdx == 2)
{
if (MinHeapArray[tmpIdx-1]>NewNO)
return 1;
else
return 0;
}
else //Index >= 2
{
if (MinHeapArray[tmpIdx-2]>NewNO)
return 1;
else
return 0;
}
}
/***********************************************************************/
void ShowTree()
{
int i;
printf("\n>> NODES VALUE: ");
for (i=1; i<=n; i++)
if (MinHeapArray[i] != 0)
printf("%d | ", MinHeapArray[i]);
else
break;
printf("\n");
}
/***********************************************************************/
int SortMinHeapTree(int index)
{
int i;
int tmp;
for(i=index; i>=1; i--)
{
// if (!FatherNode) return 0;
// if (!RightChild && !LeftChild) return 0;
if (FatherNode > LeftChild && LeftChild != 0)
{
tmp = FatherNode;
FatherNode = LeftChild;
LeftChild = tmp;
}
else if (FatherNode > RightChild && RightChild != 0)
{
tmp = FatherNode;
FatherNode = RightChild;
RightChild = tmp;
}
printf("\n Father: %d \t\t LeftChild: %d \t\t RightChild: %d\n",FatherNode,LeftChild,RightChild);
}//for
}//void
دیدگاه