strcut BinTree{
ElementType Data;
BinTree Left;
BinTree Right;
}
//先序遍历递归法:
void PreOrderTraversal(BinTree BT)
{
if(BT){
cout<<BT->Data;
PreOrderTraversal(BT->Left);
PreOrderTraversal(BT->Right);
}
}
//中序遍历递归法
void InOrderTraversal(BinTree BT)
{
if(BT){
PreOrderTraversal(BT->Left);
cout<<BT->Data;
PreOrderTraversal(BT->Right);
}
}
//后序遍历递归法
void PostOderTraversal(BinTree BT)
{
if(BT){
PreOrderTraversal(BT->Left);
PreOrderTraversal(BT->Right);
cout<<BT->Data;
}
}
//中序遍历的非递归算法(堆栈)
void InOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S = CreateStack(MaxSize); //创建并初始化堆栈S
while( T || !IsEmpty(S)){
while(T){ //向左压栈直到最后一个结点的左结点为NULL后退出循环
Push(S,T);
T=T->Left;
}
if(!IsEmpty(S){ //抛出栈顶元素,第一轮抛出叶节点
T=Pop(S);
cout<<T->Data;
T=T->Right;
}
}
}
//前序遍历的非递归算法(堆栈)
void InOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S = CreateStack(MaxSize); //创建并初始化堆栈S
while( T || !IsEmpty(S)){
while(T){ //向左压栈直到最后一个结点的左结点为NULL后退出循环
Push(S,T);
cout<<T->Data;
T=T->Left;
}
if(!IsEmpty(S){ //抛出栈顶元素,第一轮抛出叶节点
T=Pop(S);
T=T->Right;
}
}
}
//层次遍历(队列)
void LevelOrderTraversal(BinTree BT)
{
Queue Q; BinTree T;
if(!BT) return; //若是空树,直接返回
Q = CreateQueue(MaxSize);
AddQ(Q,BT);
while( !IsEmptyQ( Q ) ){
T = DeleteQ(Q);
cout<<T->Data;
if(T->Left) AddQ(Q,T->Left);
if(T->Right) AddQ(Q,T->Right);
}
}二叉树的遍历C++实现
二叉树遍历与层次遍历算法详解
最新推荐文章于 2024-09-19 00:41:25 发布
本文深入探讨了二叉树的先序、中序、后序及层次遍历算法,并通过递归与非递归两种方式实现。详细解释了每种遍历方法的特点与应用,同时提供了层次遍历的队列实现方式。
2216

被折叠的 条评论
为什么被折叠?



