二叉树的非递归遍历前中后序和层次遍历

编程入门 行业动态 更新时间:2024-10-27 04:33:22

二叉树的非递归<a href=https://www.elefans.com/category/jswz/34/1771029.html style=遍历前中后序和层次遍历"/>

二叉树的非递归遍历前中后序和层次遍历

#include<stdio.h>
#include<stack.c>
#include<stdbool.h>
#include<SquenceNode.c>#define MaxSize 20typedef struct TreeNode *BinTree;
typedef BinTree Position;
typedef int ElementType;//二叉树的链式存储结构
struct TreeNode
{ElementType Data;BinTree Left;BinTree Right;BinTree IsFirst;//用于标志是否是第一次进栈 
};/*** 二叉树的中序遍历(非递归)* */
void InorderTraversal( BinTree BT)
{BinTree T = BT;Stack S = CreateStack(MaxSize);while( T || !isEmpty( S ) ){while( T ){T->IsFirst = true;//一直向左并将沿途的结点压入堆栈Push(S,T);T = T->Left;}if(!isEmpty(S)){//左子树遍历完了,该弹出栈顶结点T = Pop(S);printf("%d", T->Data);//左子树输出完了,转向右子树T = T->Right;}}
}/*** 先序遍历的非递归遍历算法* */
void PreOrderTraversal( BinTree BT)
{BinTree T = BT;Stack S = CreateStack(MaxSize);while( T || !isEmpty( S ) ){while( T ){//一直向左并将沿途的结点压入堆栈Push(S,T);//第一次遇到这个结点就输出printf("%d", T->Data);T = T->Left;}if(!isEmpty(S)){//左子树遍历完了,该弹出栈顶结点T = Pop(S);//左子树输出完了,转向右子树T = T->Right;}}
} /*** 后序遍历的非递归遍历算法* */
void PostOrderTraversal( BinTree BT)
{BinTree T = BT;Stack S = CreateStack(MaxSize);while( T || !isEmpty( S ) ){while( T ){T->IsFirst = true;//标记为第一次进栈//一直向左并将沿途的结点压入堆栈Push(S,T);T = T->Left;}if(!isEmpty(S)){//左子树遍历完了,该弹出栈顶结点T = Pop(S);if(T->IsFirst == true){T->IsFirst = false;Push(S,T);T = T->Right;}else{printf("%d", T->Data);T = NULL;}}}
} /*** 层次遍历* */
void LevelOrderTraversal( BinTree BT)
{Queue Q;BinTree T;if( !BT ) return;Q = CreateQueue( MaxSize );Add(Q, BT);while( ! isEmpty(Q) ){T = Delete(Q);printf("%d\n", T->Data);if(T->Left)Add(Q, T->Left);if(T->Right)Add(Q, T->Right);}}

更多推荐

二叉树的非递归遍历前中后序和层次遍历

本文发布于:2023-07-28 20:26:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1300386.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:遍历   递归   层次   二叉树   前中后序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!