二叉树的遍历 非递归操作

来源:互联网 发布:知乎 英国金融硕士学费 编辑:程序博客网 时间:2024/05/02 22:08
#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <queue>#include <stack>#include <iostream>using namespace std;typedef struct BiTNode{char data;BiTNode *lchild, *rchild;}BiTNode,*BiTree;BiTree T;void CreateBiTree(BiTree &T){char ch;scanf("%c",&ch);if(ch=='@'){T=NULL;return;}else{T=(BiTree)malloc(sizeof(BiTNode));T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}}void midTraverse(BiTree T){stack<BiTree> S;if(!T){printf("空树!\n");return;}while(T || !S.empty()){while(T){S.push(T);T=T->lchild;}T=S.top();S.pop();printf("%c",T->data);T=T->rchild;}}void PreTraverse(BiTree T){stack<BiTree> S;if(!T){printf("空树!\n");return;}while(T || !S.empty()){while(T){S.push(T);printf("%c",T->data);T=T->lchild;}T=S.top();S.pop();         T=T->rchild;}}void behindTraverse(BiTree T){    stack<BiTree>S1;    stack<BiTree>S2;    BiTree cur;    S1.push(T);        if(!T){printf("空树!\n");return;}    while(!S1.empty())    {        cur=S1.top();        S1.pop();        S2.push(cur);        if(cur->lchild)            S1.push(cur->lchild);        if(cur->rchild)            S1.push(cur->rchild);    }    while(!S2.empty())    {       cout<<S2.top()->data;       S2.pop();    }}int main(){CreateBiTree(T);PreTraverse(T);printf("\n");    midTraverse(T);printf("\n");behindTraverse(T);printf("\n");return 0;}

0 0
原创粉丝点击