主题:请教关于二叉排序树的问题
咪咪毛
[专家分:0] 发布于 2006-04-04 16:44:00
请用c++设计一个算法求出指定结点的二叉排序树中的层次!谢谢~~~
回复列表 (共4个回复)
沙发
jzyray [专家分:20610] 发布于 2006-04-04 20:38:00
从跟节点开始遍历(广度优先应当比较好),每层加一即可
板凳
Tokyson [专家分:90] 发布于 2006-04-05 16:15:00
这个问题好像有人问过的,层次遍历阿
3 楼
linshubiao [专家分:930] 发布于 2006-04-05 20:06:00
二叉排序树,有左子树的顶结点比结点值小和右子树的顶结点比结点的值大的原则,只须进行指定点的值和各个结点的值的大小比较判断就可以了。
对设定的计数器进行加一,如果到了末尾也没有的话,就是没有找到了!
4 楼
冷月星光 [专家分:16520] 发布于 2006-04-05 23:01:00
#define NULL 0;
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
typedef char elemtype;
typedef struct bitnode
{
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
void creatree(bitree *s)
{
char xt;
bitree t;
scanf("%c",&xt);
if(xt==' ') *s=NULL
else
{
t=(bitnode*)malloc(sizeof(bitnode));
if (!t) printf("\n超过空间\n");
t->data=xt;
*s=t;
creatree(&((*s)->lchild));
creatree(&((*s)->rchild));
}
return;
}
void xian(bitree s)
{
if(s)
{
printf("%c->",s->data);
xian(s->lchild);
xian(s->rchild);
}
return;
}
void zhong(bitree s)
{
if(s)
{
zhong(s->lchild);
printf("%c->",s->data);
zhong(s->rchild);
}
return;
}
void hou(bitree s)
{
if(s)
{
hou(s->lchild);
hou(s->rchild);
printf("%c->",s->data);
}
return;
}
void main()
{
bitree s;
printf("\n请按先序方式输入数据!\n");
creatree(&s);
printf("\n按先序方式输出:\n");
xian(s);
printf("\b\n");
printf("\n按中序方式输出:\n");
zhong(s);
printf("\b\n");
printf("\n按后序方式输出:\n");
hou(s);
printf("\b\n");
getch();
return;
}
我来回复