شما کاری که تا الان کردی رو اینجا بذار تا بهت بگم کجای کارت ایراد داره. چیز خاصی نیست مطمئن باش حل میشه.
اصلا سخت نگیر، برنامه نویسی همینه. من خودم شده چند روز واسه دو سه خط کد الکی دور خودم چرخیدم تا آخرش راه حل رو پیدا کردم.![]()
![]()
شما کاری که تا الان کردی رو اینجا بذار تا بهت بگم کجای کارت ایراد داره. چیز خاصی نیست مطمئن باش حل میشه.
اصلا سخت نگیر، برنامه نویسی همینه. من خودم شده چند روز واسه دو سه خط کد الکی دور خودم چرخیدم تا آخرش راه حل رو پیدا کردم.![]()
![]()
سلام آقا اگه امکانش هست اینو ببینین اشکالش کجییه
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define NULL 0L
using namespace std;
int pow(int x,int y)
{
int i=0,result=1;
for(i=y;i>0;i--)
result=result*x;
return result;
}
int calclevel(int MAX)
{
int i=0,level=0;
for(i=MAX;i>0;i--)
{
level++;
i=((i-1)/2);
}
return level;
}
struct node {
int data;
node *left;
node *right;
};
void link(node* parent,node* child,int j)
{
if(j%2!=0)
parent->left=child;
else
parent->right=child;
}
node* create()
{
node *newnode=new node;
return newnode;
}
void print(node* ptr)
{
int j=0;
while(ptr->data!=0)
{
for(j=0;j<=pow(2,j);j++)
{
cout<<ptr->data<<"\t";
if(j%2==0)
print(ptr->left);
else
print(ptr->right);
}
cout<<"\n";
}
}
int main()
{
int i=0,j=0,k=0,n=0,flag=0;
node* ptr;
for(i=1;flag!=1;i++)
{
if(i==1)
{
cout<<"Insert Root : ";
node *root=new node;
cin>>root->data;
ptr=root;
for(j=1;j<=pow(2,i);j++)
{
cout<<"Insert Level "<<i+1<<" : ";
cin>>n;
if(n==0)
{
flag=1;
break;
}
node *child=new node;
link(root,child,j);
}
}
else
{
node *root=new node;
for(j=1;j<=pow(2,i);j++)
{
cout<<"Insert Level "<<i+1<<" : ";
cin>>n;
if(n==0)
{
flag=1;
break;
}
node *child=new node;
link(root,child,j);
}
}
}
print(ptr);
getch();
return 0;
کاش دقیقا توضیح میدادی که میخوای چیکار کنی. چیزی که خودم فهمیدم ظاهرا شما میخوای یک درخت دودویی کامل که هر سطحش تا آخر پر شده باشه رو تولید کنی. البته از کدی که نوشتی اینطور به نظر میرسه. برای اینکه اینکارو بکنی بهترین راهی که ذهنم رسید استفاده از یک صفه. شما که درختا رو خوندید صد در صد صفها رو هم باید خونده باشید. من سعی میکنم کدی که نوشتی رو با کمترین تغییر ممکن تبدیل به چیزی که میخوای بکنم. تا چند دقیقه دیگه واست آپ میکنم.
برنامه برای پر کردن هر سطح از کاربر سوال میکنه اگه جواب مثبت باشه داده های اون سطح رو به درخت اضافه میکنه و در صورتی که جواب منفی باشه از حلقه خارج میشه و در آخر تمام داده های درخت به روش level_order یا همون پیمایش سطحی نمایش داده میشه. نکته ای که حتما میدونید اینه که با اضافه شدن هر سطح تعداد گره ها به نسبت سطح قبل دو برابر خواهند شد پس باید داده های بیشتری رو وارد درخت کنید. موفق باشید.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بابا دستت درد نکنه. خیلی آقایی ممنون![]()
خواهش میکنم سعید خان.
میشد برای کنترل خاتمه دریافت اطلاعات از همون فلگ استفاده کرد. منتها به نظرم این راه در این مسئله مناسبتر بود. یکی دو تا تابع هم اضافست که یادم رفت پاک کنم. مثل تابع link.
به هر حال امیدوارم که به دردت خورده باشه. موفق باشی![]()
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)