// 层次遍历voidLevelorderTraversal(BiTree T){if(T){// 不用队列,只能取数组了
BiTree B[100];// 根节点第一个
B[0]= T;// 巧妙之处 int first =0;int after =1;// 循环 while(first < after){printf("%d ",B[first]->data);if(B[first]->lchild){
B[after]= B[first]->lchild;
after++;}// of if for lchildif(B[first]->rchild){
B[after]= B[first]->rchild;
after++;}// of if for rchild
first++;}// end while}// end if}// end LevelorderTraversal
法二:
//层次遍历voidLevelorderTraversal( BiTree T ){
BiTree a[100];int i =0,j =0;
a[0]= T;while(T){if(T->lchild!=NULL) a[++i]= T->lchild;if(T->rchild!=NULL) a[++i]= T->rchild;
BiTree t = a[j];printf(" %d",t->data);if(i==j)break;
j++;
T = a[j];}}
2.5 测试
2.5.1 源码
#include<stdio.h>#include<malloc.h>typedefint TElemType;// 二叉树的二叉链表存储表示typedefstruct BiTNode {
TElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;voidCreateBiTree(BiTree &T){//
T =(BiTree)malloc(sizeof(BiTNode));//
TElemType data;scanf("%d",&data);if(data ==-1) T =NULL;if(T){
T->data = data;printf("输入%d节点的左子节点:\n",data);CreateBiTree(T->lchild);printf("输入%d节点的右子节点:\n",data);CreateBiTree(T->rchild);}// end if}// end CreateBiTree// 先序遍历voidPreorderTraversal(BiTree T){if(T){printf("%d ",T->data);PreorderTraversal(T->lchild);PreorderTraversal(T->rchild);}}// 中序遍历voidInorderTraversal(BiTree T){if(T){InorderTraversal(T->lchild);printf("%d ",T->data);InorderTraversal(T->rchild);}}// 后序遍历voidPostorderTraversal(BiTree T){if(T){PostorderTraversal(T->lchild);PostorderTraversal(T->rchild);printf("%d ",T->data);}}// 层次遍历voidLevelorderTraversal(BiTree T){if(T){// 不用队列,只能取数组了
BiTree B[100];// 根节点第一个
B[0]= T;// 巧妙之处 int first =0;int after =1;// 循环 while(first < after){printf("%d ",B[first]->data);if(B[first]->lchild){
B[after]= B[first]->lchild;
after++;}// of if for lchildif(B[first]->rchild){
B[after]= B[first]->rchild;
after++;}// of if for rchild
first++;}// end while}// end if}// end LevelorderTraversalintmain(void){printf("输入根节点:\n");
BiTree T;CreateBiTree(T);printf("先序遍历:");PreorderTraversal(T);printf("\n");printf("中序遍历:");InorderTraversal(T);printf("\n");printf("后序遍历:");PostorderTraversal(T);printf("\n");printf("层次遍历:");LevelorderTraversal(T);printf("\n");return0;}
/**
* 层次遍历
* @param T
*/publicstaticvoidLevelorderTraversal(BiTree T){if(T != null){// 不用队列,只能取数组了
BiTree[] B =newBiTree[100];// 根节点第一个
B[0]= T;// 巧妙之处 int first =0;int after =1;// 循环 while(first < after){
System.out.printf("%d ",B[first].data);if(B[first].lchild != null){
B[after]= B[first].lchild;
after++;}// of lchildif(B[first].rchild != null){
B[after]= B[first].rchild;
after++;}// of rchild
first++;}// end while}// end if}// end LevelorderTraversal