二叉树中的层序遍历
发布时间: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");