#include <stdio.h>
#include <stdlib.h>
#include "bitree.h"
#include "sqstack.h"


void InOrderTraverse2(BiTree T,void(*Visit)(TElemType));// 中序非递归遍历二叉树

int main()
{
	BiTree T;	
	CreateBiTree(T);
	printf("中序遍历:");
	InOrderTraverse2(T,visit);
	printf("\n");
  DestoryBiTree(T);	
	return 0;
}


void InOrderTraverse2(BiTree T,void(*Visit)(TElemType))
{  // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。
   // 中序遍历二叉树T的非递归算法,对每个数据元素调用函数Visit
  /********** Begin *********/
  SqStack S;//定义并初始化栈
  InitStack(S);
  if(T==NULL)
      return;
  while(T||!StackEmpty(S)){
    if(T){
      Push(S,T);
      T=T->lchild;
    }
    else{
        Pop(S,T);
        Visit(T->data);
        T=T->rchild;
    }
  }
  DestroyStack(S);
  /********** End **********/
 }


posted on 2024-06-20 17:50  findscripter  阅读(20)  评论(0)    收藏  举报