二叉树遍历(递归和非递归)及应用

本文介绍了二叉树的三种遍历方式:前序(VLR)、中序(LVR)、后序(LRV)遍历。详细探讨了递归和非递归的方法,包括利用栈进行前序遍历,以及非递归中序和后序遍历的算法实现。层次遍历则借助队列完成,确保所有节点按层级顺序访问。此外,还讨论了非递归遍历中如何利用栈记录回退路径以及判断节点访问条件。
摘要由CSDN通过智能技术生成

二叉树的遍历方法主要有前序遍历(VLR),中序遍历(LVR),后序遍历(LRV)。递归的遍历方式主要是访问函数的位置,比较简单,不过也可以用非递归的方式进行遍历。(参考了殷人昆《数据结构第二版》清华大学出版社)

利用栈的前序遍历递归算法:(主要是记录下当前节点的右子树)

template<class T>
void BinTree<T>::PreOrder()
{
	stack<BinTreeNode<T>*>s;
	BinTreeNode<T> *subTree=root;
	s.push(NULL);
	while(subTree != NULL)
	{
		cout << subTree->data << "   ";
		if (subTree->rChild)
			s.push(subTree->rChild);
		if (subTree->lChild)
			subTree = subTree->lChild;
		else if (!s.empty())
		{
			subTree = s.top();
			s.pop();
		}
	}
	cout << endl;
}

二叉树后序遍历可以计算二叉树节点的个数和二叉树的高度:

节点个数:

template<class T>
int BinTree<T>::Size(BinTreeNode&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值