满意答案
Dcool
2016.08.27
采纳率:58% 等级:9
已帮助:416人
队列??你每输入一个节点将其存入队列中,再输入它的左孩子,它的左孩子也会入队,我们取的时候应先取该节点的左孩子,
LZ一定要用队列也行,但绝对不是正确的选择!
队列如下:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990#include using namespace std;typedef struct bitnode{ char data; struct bitnode *lchild,*rchild;}*bitree,tree;int number=0;void createbitree(bitree &t){ char c; int i=0,r=0,f=0;//r,f分别指向队首和队尾 bitree p=NULL,temp=NULL,pre=NULL,s[100]; s[0]=NULL; int lflag[100]={0}; int rflag[100]={0}; printf("请输入根节点:"); t=new tree; t->lchild=t->rchild=NULL; scanf("%c",&t->data); temp=pre=t->lchild; s[++i]=t; f=i; p = t; while(f!=r) { if(p->lchild==NULL&&lflag[i]==0) { printf("请输入%c的左孩子:",p->data); fflush(stdin); scanf("%c",&c); if(c!='#') { p->lchild = new tree; p = p->lchild; p->lchild=p->rchild=NULL; p->data = c; s[++f]=p; i = f; lflag[i]=rflag[i]=0; } else lflag[i]=1; } else if(p->rchild==NULL&&rflag[i]==0) { printf("请输入%c的右孩子:",p->data); fflush(stdin); scanf("%c",&c); if(c!='#') { p->rchild = new tree; p = p->rchild; p->lchild=p->rchild=NULL; p->data = c; s[++f]=p; i=f; lflag[i]=rflag[i]=0; } else { rflag[i]=1; p=s[++r]; i=r; } } else { p=s[++r]; i=r; } }}void preorder(bitree &t)//遍历二叉树,输出函数{ if (t!=0) { cout<data<lchild); preorder(t->rchild); }}void main(){ bitree t; t=0; createbitree(t); cout<
在此,强烈建议LZ用栈,更符合树的输入层次:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283#include using namespace std;typedef struct bitnode{ char data; struct bitnode *lchild,*rchild;}*bitree,tree;int number=0;void createbitree(bitree &t){ char c; int i=0; bitree p=NULL,temp=NULL,pre=NULL,s[100]; s[0]=NULL; int lflag[100]={0}; int rflag[100]={0}; printf("请输入根节点:"); t=new tree; t->lchild=t->rchild=NULL; scanf("%c",&t->data); temp=pre=t->lchild; s[++i]=t; p = t; while(s[i]!=NULL) { if(p->lchild==NULL&&lflag[i]==0) { printf("请输入%c的左孩子:",p->data); fflush(stdin); scanf("%c",&c); if(c!='#') { p->lchild = new tree; p = p->lchild; p->lchild=p->rchild=NULL; p->data = c; s[++i]=p; lflag[i]=rflag[i]=0; } else lflag[i]=1; } else if(p->rchild==NULL&&rflag[i]==0) { printf("请输入%c的右孩子:",p->data); fflush(stdin); scanf("%c",&c); if(c!='#') { p->rchild = new tree; p = p->rchild; p->lchild=p->rchild=NULL; p->data = c; s[++i]=p; lflag[i]=rflag[i]=0; } else { rflag[i]=1; p=s[--i]; } } else p=s[--i]; }}void preorder(bitree &t)//遍历二叉树,输出函数{ if (t!=0) { cout<data<lchild); preorder(t->rchild); }}void main(){ bitree t; t=0; createbitree(t); cout<
不懂追问!你的疑问往往是我要学习的地方!追问: 附件失效了
追答:逗……服了百度……老是出事
不行啊,传不上去,
你QQ多少……我发邮件
01分享举报