《二叉树的三种遍历代码及其注释》由会员分享,可在线阅读,更多相关《二叉树的三种遍历代码及其注释(3页珍藏版)》请在金锄头文库上搜索。
1、#include#include#include#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1using namespace std;typedef int Status;#define CHAR#ifdef CHARtypedef char ElemType;ElemType Nil=#;#endiftypedef struct BiTNodeElemType data;/ 结点的值BiTNode *lchild,*rchild; / 左
2、右孩子指针BiTNode,*BiTree;Status InitBiTree(BiTree &T)/ 操作结果:构造空二叉树TT=NULL;return OK;void CreateBiTree(BiTree &T)/ 算法6.4:按先序次序输入二叉树中结点的值(可为字符型或整型,在主程中定义),/ 构造二叉链表表示的二叉树T。变量Nil表示空(子)树。修改ElemType ch;#ifdef CHARscanf(%c,&ch);#endifif(ch=Nil)T=NULL;else T=(BiTree)malloc(sizeof(BiTNode); if(!T) exit(OVERFLOW)
3、; T-data=ch; CreateBiTree(T-lchild); CreateBiTree(T-rchild);void PreOrderTraverse(BiTree T,Status(*Visit)(ElemType) if(T) Visit(T-data); PreOrderTraverse(T-lchild,Visit); PreOrderTraverse(T-rchild,Visit); void InOrderTraverse(BiTree T,Status(*Visit)(ElemType) if(T) InOrderTraverse(T-lchild,Visit); V
4、isit(T-data); InOrderTraverse(T-rchild,Visit); void PostOrderTraverse(BiTree T,Status(*Visit)(ElemType) if(T) PostOrderTraverse(T-lchild,Visit); PostOrderTraverse(T-rchild,Visit); Visit(T-data); Status Visit(ElemType e) #ifdef CHAR printf(%c ,e); #endif return OK;int main()BiTree T,p,c; ElemType e1,e2; int i;InitBiTree(T);/ 初始化二叉树TCreateBiTree(T);/ 建立二叉树Tprintf(前序遍历结果:);PreOrderTraverse(T,Visit);printf(n);/ 先序递归遍历二叉树Tprintf(中序遍历结果:);InOrderTraverse(T,Visit);printf(n);/ 中序递归遍历二叉树Tprintf(后序遍历结果:);PostOrderTraverse(T,Visit);printf(n);/ 后序递归遍历二叉树T