| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 664 人关注过本帖
标题:关于二叉树的问题,总是弄不明白出血者难做啊
只看楼主 加入收藏
olifuu
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-12-2
收藏
 问题点数:0 回复次数:4 
关于二叉树的问题,总是弄不明白出血者难做啊

已知以二叉链表作存储结构,试编写按层次顺序遍历二叉树的算法。
算法思想:本算法要采用一个队列q,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。因为队列的特点是先进先出,从而达到按层次顺序遍历二叉树的目的。

我的程序编译成功但是运行老让我输入高人帮我改改最好能
讲解一下每句的意思,我很想学好这个
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#define M 100
#define Null 0
typedef struct node
{ int data;
struct node *lchild,*rchild;
}bitree;
bitree *que[M];
int front=0,rear=0;
bitree *creat()
{bitree *t;
int x;
scanf("%d",&x);
if(x==0)
t=Null;
else
{t=malloc(sizeof(bitree));
t->data=x;
t->lchild=creat();
t->rchild=creat();
}
return t;
}

void inorder(t)
bitree*t;
{if(t!=Null)
{inorder(t->lchild);
printf("%4d",t->data);
inorder(t->rchild);
}
}

void enqueue(t)
bitree *t;
{if(front!=(rear+1)%M)
{rear=(rear+1)%M;
que[rear]=t;
}
}
bitree *delqueue()
{
if(front==rear)
return Null;
front=(front+1)%M;
return (que[front]);
}

void levorder(t)
bitree *t;
{bitree *p;
if(t!=Null)
{enqueue(t);
while(front!=rear)
{p=delqueue();
printf("%4d",p->data);
if(p->lchild!=Null)
enqueue(p->lchild);
if(p->rchild!=Null)
enqueue(p->rchild);}
}
}

main()
{bitree *root;
printf("\n");
root=creat();
inorder(root);
printf("\n");
levorder(root);
return Null;
}

搜索更多相关主题的帖子: 二叉树 
2006-12-07 16:41
mayudong1
Rank: 2
等 级:论坛游民
威 望:1
帖 子:348
专家分:21
注 册:2006-4-18
收藏
得分:0 
bitree *creat()
{bitree *t;
int x;
scanf("%d",&x);
if(x==0)
t=Null;
else
{t=malloc(sizeof(bitree));
t->data=x;
t->lchild=creat(); 这里用递归要结束的话递归几次得输入几次0
t->rchild=creat();
}
return t;
}


2006-12-07 21:07
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
bitree *creat()
{ bitree *t;
int x;
scanf("%d",&x);
if(x==0)
t=Null;
else
{
t=malloc(sizeof(bitree));
t->data=x;
t->lchild=creat();
t->rchild=creat();
}
return t;
}

递归需要出口条件.频繁的调用creat()函数,t又是一个局部变量.根本就不能结束.

给个建立二叉树的参考程序.看看为什么不同.

void createbintree(bintree *t)/*按照前序遍历顺序建立一棵给定的二叉树*/
{ char ch;
if((ch=getchar())==' ')
*t=NULL;
else{
*t=(bintnode *)malloc(sizeof(bintnode));
(*t)->data=ch;
createbintree(&(*t)->lchild);
createbintree(&(*t)->rchild);
}
}

倚天照海花无数,流水高山心自知。
2006-12-07 21:21
海天飞鸿
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-11-20
收藏
得分:0 
受益非浅!谢谢!
2006-12-15 15:46
happyboe
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-10-27
收藏
得分:0 

测试了一下,没问题啊,能正常中止,楼主是不是没认真测试啊

2006-12-15 20:08
快速回复:关于二叉树的问题,总是弄不明白出血者难做啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048570 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved