二叉树的中序遍历--------零基础学数据结构讲座(2)

二叉树的中序遍历的递归定义如下:

如果二叉树为空,则执行空操作。如果二叉树非空,则执行以下操作:

1)中序遍历左子树。

2)访问根结点。

3)中序遍历右子树。

 

二叉树的中序遍历非递归算法实现如下。

void InOrderTraverse(BiTree T)

/*中序遍历二叉树的非递归实现*/

{

BiTree stack[MaxSize];                                   /*定义一个栈,用于存放结点的指针*/

int top;                                                               /*定义栈顶指针*/

BitNode *p;                                                      /*定义一个结点的指针*/

top=0;                                                                 /*初始化栈*/

p=T;

while(p!=NULL||top>0)

{

    while(p!=NULL)                                                /*如果p不空,访问根结点,遍历左子树*/

    {

        stack[top++]=p;                               /*p入栈*/

        p=p->lchild;                                      /*遍历左子树*/

    }

    if(top>0)                                                    /*如果栈不空*/

    {

        p=stack[--top];                                 /*栈顶元素出栈*/

        printf(“% 2c ”,p->data);                     /*访问根结点*/

        p=p->rchild;                                      /*遍历右子树*/

    }

}

}

 

你可能感兴趣的:(数据结构,c,算法,null)