c语言兄弟孩子链表,阅读以下说明、图和C代码。

阅读以下说明、图和C代码。

【说明】

一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。例如,图10-8(a)所示的树的孩子-兄弟表示如图10-8(b)所示。

6c3e2b22f6c3274c3b6f0880f2b492de.png

函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对图10-1所示的树进行层序遍历时,结点的访问次序为D B A E F P C。

对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示:

a1e886b77e3f902a0481e8a55e295357.png

Bool、Status类型定义如下:

typedef enum { FALSE=0,TRUE=1 } Bool;

typedef enum { VERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1}Status;

树的二叉链表结点定义如下:

typedef struct Node {

char data;

struct Node *firstchild,*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*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值