PDA

View Full Version : سوال: ترسیم درخت دودویی با استفاده از پیمایشهای inorder و preorder



peekneek
یک شنبه 26 اردیبهشت 1389, 23:02 عصر
با سلام خدمت تمام دوستانی که عاشق برنامه نویسی هستند.
من یک برنامه برای نمایش درخت دودویی با استفاده از پیمایشهایی که در عنوان ذکر کردم نوشتم اما تنها مشکلی که این برنامه داره اینه که فقط با درخت دودویی پر کار میکنه. یعنی فرق نمی کنه که چند تا سطح داره فقط باید پر باشه تا خروجی بده. لذا از دوستان عزیز تقاضا می کنم که اگر می تونن یه راهنمایی برای رفع مشکل این برنامه به من بدن ممنون میشم. اینم کدی که نوشتم:



#include <iostream.h>
#include <conio.h>
#include <STRING.H>
char in[17]={'0','h','d','i','b','j','e','k','a','l','f','m', 'c','n','g','o'};
char pre[17]={'0','a','b','d','h','i','e','j','k','c','f','l', 'm','g','n','o'};
char t[17]={'0'};
int n=1,m,s1,s2,s3,j=1,f=0,k=1;
int main(){
clrscr();
t[1]=pre[1];
m=(strlen(in))-1;
while(pre[1] != in[j])
j++;
s2=j;
for (int i=2;i<=m;i++){
j=1;
while(pre[i] != in[j])
j++;
s3=j;
if (s3<s2){
n=n*2;
t[n]=in[s3];
s2=s3;
}
else{
f=f+1;
if ((f%2)!=0){
n=n/2;
t[n*2+1]=in[s3];
}
else if ((f%4)==0){
n=n/4;
n=n*2+1;
t[n]=in[s3];
}
else{
n=n/2;
n=n*2+1;
t[n]=in[s3];
}
s2=s3;
}
}
cout<<"preorder is: "<<pre<<'\n';
cout<<"inorder is: "<<in<<'\n';
cout<<"the tree is: "<<t<<'\n';
getch();
return 0;
}

peekneek
دوشنبه 27 اردیبهشت 1389, 11:33 صبح
یعنی کسی نیست یکم منو راهنمایی کنه؟

saber187518
دوشنبه 27 اردیبهشت 1389, 12:51 عصر
با سلام دوست عزیز شما میتونی توی حلقه تکرارت یه شرط یذاری که اگه اون خونه خالی بود continue انجام بده و از اجرای فعلی صرف نظر کنه و بره سراغ خانه بعدی.

peekneek
دوشنبه 27 اردیبهشت 1389, 20:52 عصر
متشکر از شما صابر عزیز. اما میتونی بگی چطور این کارو بکنم یا کجاش این دستور قرار بدم. منون می شم. درضمن شما گفته بودی که کدی داری که میتونه به من کمک کنه اگه انو هم بذاری برام ازت منون می شم.