1 typedef struct TreeNode *BinTree; 2 typedef BinTree Position; 3 struct TreeNode{ 4 ElementType Data; 5 BinTree Left; 6 BinTree Right; 7 }; 8 BinTree BT; 9 void InOrderTraversal(BinTree BT)//中序遍历非递归遍历算法(使用堆栈,用循环实现) 10 { 11 BinTree T=BT; 12 Stack S=CreakStack(MaxSize);//创建并初始化堆栈S 13 while(T||!IsEmpty(S)){ 14 while(T){//一直向左并将沿途结点压入堆栈 15 Push(S,T); 16 T=T->Left; 17 } 18 if(!IsEmpty(S)){ 19 T=Pop(S);//结点弹出堆栈 20 printf("%5d",T->Data);//(访问)打印结点 21 T=T->Right;//转向右子树 22 } 23 } 24 } 25 void PreOrderTraversal(BinTree BT)//先序遍历非递归遍历算法(使用堆栈,用循环实现) 26 { 27 BinTree T=BT; 28 Stack S=CreakStack(MaxSize);//创建并初始化堆栈S 29 while(T||!IsEmpty(S)){ 30 while(T){//一直向左并将沿途结点压入堆栈 31 printf("%5d",T->Data);//(访问)打印结点 32 Push(S,T); 33 T=T->Left; 34 } 35 if(!IsEmpty(S)){ 36 T=Pop(S);//结点弹出堆栈 37 T=T->Right;//转向右子树 38 } 39 } 40 } 41 void PostOrderTraversal( BinTree BT )//后序遍历非递归遍历算法(使用堆栈,用循环实现) 42 { 43 BinTree T BT; 44 Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/ 45 Stack Q = CreatStack( MaxSize ); /*创建并初始化堆栈Q,用于输出反向*/ 46 while( T || !IsEmpty(S) ){ 47 while(T){ /*一直向右并将沿途结点压入堆栈*/ 48 Push(S,T); 49 Push(Q,T);/*将遍历到的结点压栈,用于反向*/ 50 T = T->Right; 51 } 52 if(!IsEmpty(S)){ 53 T = Pop(S); /*结点弹出堆栈*/ 54 T = T->Left; /*转向左子树*/ 55 } 56 } 57 while( !IsEmpty(Q) ){ 58 T = Pop(Q); 59 printf(“%5d”, T->Data); /*(访问)打印结点*/ 60 } 61 }
时间: 2024-11-08 00:20:41