[说明]
一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩予节点和下一个兄弟节点。例如,图4-1(a)所示的树的孩子-兄弟表示如图4-1fb)所示。
函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对图4-1所示的树进行层序遍历时,节点的访问次序为:D B A E F P C。
对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示。
Bool、Status类型定义如下:
typedef enum FALSE = 0, TRUE = 1 Bool;
typedef enum OVERFLOW = -2, UNDERFLOW = -1, ERROR = 0, OK = 1 Status;
树的二叉链表节点定义如下:
typedef struct Node
char data;;
struct Node *fimrstchiid, *nextbrother;
Node, *TreeNode;
[函数]
Status LevelTraverse(TreeNode root)
/*层序遍历树,树采用孩子-兄弟表示法,root是树根节点的指针*/
Queue tempQ;
TreeNode ptr, brotherptr;
if (!root)
return ERROR;
InitQueue(&tempQ);
(1) ;
brotherptr = root -> nextbrother;
while (brotherptr) EnQueue(&tempQ, brotherptr);
(2) ;
/*end-while*/
while( (3) )
(4) ;
printf( "%c\t", ptr->data);
if( (5) )continue;
(6) ;
brotherptr = ptr->firstchild->nextbrother;
while(brotherptr) EnQueue(&tempQ, brotherptr);
(7) ;
/*end-while*/
/*end-while*/
return OK;
)/*LevelTraverse*/