PDA

View Full Version : سوال: تبدیل یک آرایه به یک درخت دودویی



alirezabe
شنبه 25 اردیبهشت 1389, 17:10 عصر
سلام
من یک آرایه از اعداد دارم مثلا از 1 تا 9 حالا می خواهم آن را به صورت یک درخت دودویی نمایش دهد
می خواستم بدونم چطوری باید این کار را انجام دهم
من خودم تابع بازگشتی نوشتم ولی یا عناصر سمت راست را نشان نمی داد یا داخل حلقه بی نهایت می افتاد :عصبانی++:
ممنون می شم کمکم کنید

این هم یک شکل کلی که منظورم را بهتر متوجه شوید

http://parsaspace.com/files/7745738884/tree.doc.html

tdkhakpur
شنبه 25 اردیبهشت 1389, 17:54 عصر
بهتر بود همان کد را قرار میدادید
کد زیر این کار را برایتان انجام میدهد.


struct TreeSt{
int Data;
void *lef;
void *right;
}Tree, *newTree, *oldTree;

void Array2Tree(int *array, int count)
{
oldTree = &Tree;
oldTree->Data = array[0];
oldTree->lef = NULL;
oldTree->right = NULL;
for( int i=1; i<count; i++){
newTree = (void *)new char [sizeof(struct TreeSt)];
newdTree->left = newdTree->right = NULL;
if( oldTree->Data>array[i])
newdTree->left = newTree;
else
newdTree->right = newTree;
oldTree = newTree;
}
}
void deleteTree(void)
{
oldTree = &Tree;
while( oldTree !=NULL){
newTree = oldTree->left!=NULL ? oldTree->left : oldTree->right;
delete [] oldTree;
oldTree = newTree;
}
}
استفاده
void main(void)
{
int *array = {1, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4 };
Array2Tree(array, sizeof(array)/sizeof(int));
deleteTree();
}

کدها با توجه به الگوریتم شما بصورتی دستی کد شد.