非递归前序遍历二叉树
#include<stdio.h> #include<stdlib.h> //定义结构体 typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiNode,* pBiNode; pBiNode stack[100]; void later(pBiNode * p) //前序创建树 { char ch; scanf("%c",&ch); if(ch=='#') *p=NULL; else { printf("%c\n",ch); *p=(pBiNode)malloc(sizeof(BiNode)); if(!*p) exit(-1);//异常退出 (*p)->data=ch; later(&(*p)->lchild); later(&(*p)->rchild); } } void print(pBiNode p) //前序遍历(输出二叉树) { int i=-1; while(1) { while(p!=NULL) { stack[++i]=p->rchild; printf("%c",p->data); p=p->lchild; } if(i!=-1) //将所有入栈的右孩子出栈 { p=stack[i]; i--; } else return; } } void main() { pBiNode pbiNode; later(&pbiNode); printf("非递归前序遍历输出二叉树:\n"); print(pbiNode); }
注意:
在将指向明确的内存空间的地址赋给指针变量前,不要对指针变量指向的内存空间的内容做任何修改,因为不确定它到底指向哪。