您当前的位置:首页 > 互联网教程

二叉树中的层序遍历

发布时间:2025-05-17 02:13:38    发布人:远客网络

二叉树中的层序遍历

一、二叉树中的层序遍历

1、层次遍历就是按二叉树的每一层的顺序来遍历,也就是先访问根结果,然后访问第一层,接着访问第二层...

2、38题应选:B。大致是先从层次上看出二叉树的根结点为然后从中序中可以看出DBA为左边的结点,CE为右边的结点。然后结合两个可以发现D、E分别是第二层的左右子结点。而B,A则分别为第三层第四层的右结点,C是第三层上的左结点。

二、关于数据结构C语言二叉树的程序,请人帮忙看看~谢谢

1、给你完全调好了,一切正常运行:

2、typedef int status;//C中没有status类型,所以想使用这个类型你必须定义它

3、#define OVERFLOW-2//OK、OVERLFLOW、ERROR这些宏的定义头文件中是没有的,所以你必须自己定义它们

4、struct BiTNode*lchild,*rchild;

5、struct QNode*next;//马虎。少个字符Q

6、/*printf("Input the char\n");//你把输出语句放到递归的函数里它会输出N多遍,所以,还是放到主函数里吧*/

7、scanf("%c",&ch);//你忘了取地址符了

8、/*if(ch=='#')T==NULL;*/ if(ch=='#')T=NULL;//是将T指针赋值为空,而不是T==NULL;

9、if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);

10、/**T.data=ch;*/T->data=ch;//楼主要仔细研究一下指向运算符"->"和结构体成员运算符"."的区别,此程序中N多错误都是因为没有区分它们引起的

11、status DLR(BiTree root)//void类型是不能返回值的,所以你可以把函数改成status类型;函数参数不用引用。因为没有改变参数值,只是使用

12、DLR(root->rchild);//这一点属于严重错误,说明你没有弄清递归遍历的过程。是先根,再左,再右。下面还有三个同样的错误

13、status LDR(BiTree root)//函数参数不用引用。因为没有改变参数值,只是使用

14、status LRD(BiTree root)//函数参数不用引用。因为没有改变参数值,只是使用

15、Found_SUM(root->rchild);//递归求结点数,和遍历函数有什么关系?

16、if(!root->lchild&&!root->rchild)j++;

17、FOUND_LEAVES(root->lchild);

18、FOUND_LEAVES(root->rchild);

19、status InitQueue(LinkQueue&Q)//这儿应该是初始化队列,而不是销毁队列吧。。。汗。。。你原来的步骤是用来销毁队列Q的啊

20、Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

21、status EnQueue(LinkQueue&Q,BiTree e)

22、p=(QueuePtr)malloc(sizeof(QNode));//马虎,少个右括号

23、p->data=e;p->next=NULL;//马虎,两个语句要用";"分开

24、status DeQueue(LinkQueue&Q,BiTree&e)//此处添加一个引用参数e较为方便,你原来的方法太复杂了

25、if(Q.front==Q.rear)return ERROR;

26、while(Q.front<Q.rear)//如果队列非空

27、if(root->lchild)EnQueue(Q,root->lchild);

28、if(root->rchild)EnQueue(Q,root->rchild);

29、T=(BiTree)malloc(sizeof(BiTNode));

30、printf("Input the char\n");

31、printf("先序遍历二叉树:\n");

32、printf("中序遍历二叉树:\n");

33、printf("后序遍历二叉树:\n");

34、printf("层序遍历二叉树:\n");

35、/*LSCAN(T);//不知你为啥要用两遍这个函数,给你注释掉了一个*/

36、printf("叶子结点数目%d",b);printf("\n");