二叉树的遍历C++实现

二叉树遍历与层次遍历算法详解
本文深入探讨了二叉树的先序、中序、后序及层次遍历算法,并通过递归与非递归两种方式实现。详细解释了每种遍历方法的特点与应用,同时提供了层次遍历的队列实现方式。
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);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值