下面是一种思想,是以前我学习的时候用过的,我记得是书上有吧,然后整理了下:
方法:使用队列访问当前节点的子节点,然后是用递归思想来做
void HierarchyBiTree(BiTree Root){
LinkQueue *Q; // 保存当前节点的左右孩子的队列
InitQueue(Q); // 初始化队列
if (Root == NULL) return ; //树为空则返回
BiNode *p = Root; // 临时保存树根Root到指针p中
Visit(p->data); // 访问根节点
if (p->lchild)
EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列
if (p->rchild)
EnQueue(Q, p->rchild); // 若存在右孩子,右孩子进队列
//根节点想打印在这就可以打印出来
while (!QueueEmpty(Q)) // 若队列不空,则层序遍历
{
DeQueue(Q, p); // 出队列
Visit(p->data); // 访问当前节点
if (p->lchild)
EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列
if (p->rchild)
EnQueue(Q, p->rchild); // 若存在右孩子,右孩子进队列
}
DestroyQueue(Q); // 释放队列空间
return ;
大概就是酱紫,我感觉是挺清晰的。
当然直接用递归也行的,个人感觉用循环清晰些,莫喷我~~~