二叉树非递归遍历

来源:互联网 发布:python的应用范围 编辑:程序博客网 时间:2024/05/18 12:01

先序遍历非递归遍历算法

/* 先序遍历非递归遍历算法 遇到一个结点,就把它压栈并输出,然后去遍历它的左子树; 当左子树遍历结束后,从栈顶弹出这个结点; 然后按其右指针再去先序遍历该结点的右子树。*/void InOrderTraversal( BinTree BT ){     BinTree T BT;Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/    while( T || !IsEmpty(S) ){         while(T){ /*一直向左并将沿途结点压入堆栈*/          printf(“%5d”, T->Data); /*(访问)打印结点*/             Push(S,T);            T = T->Left; }     if(!IsEmpty(S)){         T = Pop(S); /*结点弹出堆栈*/         T = T->Right; /*转向右子树*/         }    }}

中序遍历非递归遍历算法

/* 中序遍历非递归遍历算法 遇到一个结点,就把它压栈,并去遍历它的左子树; 当左子树遍历结束后,从栈顶弹出这个结点并访问它; 然后按其右指针再去中序遍历该结点的右子树。*/void InOrderTraversal( BinTree BT ){     BinTree T=BT;Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/    while( T || !IsEmpty(S) ){         while(T){ /*一直向左并将沿途结点压入堆栈*/             Push(S,T);             T = T->Left; }         if(!IsEmpty(S)){             T = Pop(S); /*结点弹出堆栈*/      printf(“%5d”, T->Data); /*(访问)打印结点*/             T = T->Right; /*转向右子树*/         }    }}

层序遍历算法

/*层序基本过程: 根节点入队,从队列中取出一个元素; 访问该元素所指结点; 若该元素所指结点的左、右孩子结点非空,将其左、右孩子的指针顺序入队。*/void BFSOrderTraversal ( BinTree BT ){     Queue Q; BinTree T;        if ( !BT )     return; /* 若是空树则直接返回 */    Q = CreatQueue( MaxSize ); /*创建并初始化队列Q*/        AddQ( Q, BT );    while ( !IsEmptyQ( Q ) ) {         T = DeleteQ( Q );    printf(“%d\n”, T->Data); /*访问取出队列的结点*/    if ( T->Left ) AddQ( Q, T->Left );    if ( T->Right ) AddQ( Q, T->Right );  }}
原创粉丝点击