二叉树的非递归遍历

本文详细介绍了二叉树的先序、中序和后序遍历的非递归实现方法,通过使用栈来辅助遍历过程,避免了递归带来的栈溢出风险,适用于大规模二叉树的遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先序遍历非递归实现

从根节点开始向左遍历,因为是先序遍历,所以每次刚遇到的节点直接输出就行,并把节点加入栈中。单次while (p != nullptr)内循环结束,就代表以开始节点为子树的左子树已经遍历完毕,接下来就需要遍历最底层子树的右节点,即从栈中取出栈顶,也就是之前遍历左子树的最后一个节点,指向其的右儿子,如果有右儿子,则开始遍历以右儿子为根节点的子树的左子树,开始循环,如果没有右儿子,也就是p == nullptr的情况下,则取出下一个栈顶,直到栈为空为止。

void goPreOrder(BintreeNode *& root) {
	stack<BintreeNode*> st;
	BintreeNode* p = root;
	while (!st.empty() || p != nullptr) {
		while (p != nullptr) {
			cout << p->data;
			st.push(p);
			p = p->child[0];
		}
		if (!st.empty()) {
			p = st.top()->child[1];
			st.pop();
		}
	}
	return;
}

中序遍历非递归实现

先遍历以开始节点为根节点的当前子树的左子树,一路遍历到底,期间把遍历到的节点加入栈中,而后每次取出栈顶,准备遍历以其节点为根节点的子树的右子树时,就把取出的栈顶节点输出,因为这个节点已经没有左儿子了,按中序遍历的规则,已然能输出。先遍历完左子树,遍历期间的节点加入栈顶,然后取出栈顶,并输出,再遍历以取出栈顶为根节点的子树的右子树,直到最后,期间按序输出的节点就是中序遍历的结果。

void goInOrder(BintreeNode*& root) {
	stack<BintreeNode*> st;
	BintreeNode* p = root;
	while (!st.empty() || p != nullptr) {
		while (p != nullptr) {
			st.push(p);
			p = p->child[0];
		}
		if (!st.empty()) {
			p = st.top();
			st.pop();
			cout << p->data;
			p = p->child[1];
		}
	}
}

后序遍历非递归实现

后序遍历的非递归实现,则需要先遍历完所有的儿孙才可,那么我们只需要在之前两个非递归遍历的基础上进行修改,即把栈顶取出的节点,不进行弹出,直到其儿孙节点都遍历结束,也就是第二次从栈顶取出节点的时候,再把它输出。这样输出的序列,即是后序遍历的结果。

void goPostOrder(BintreeNode*& root) {
	stack<pair<BintreeNode*, bool>> st;
	BintreeNode* p = root;
	while (!st.empty() || p != nullptr) {
		while (p != nullptr) {
			st.push(make_pair(p, false));
			p = p->child[0];
		}
		if (!st.empty()) {
			pair<BintreeNode*, bool> &nowNode = st.top();
			if (nowNode.first->child[1] == nullptr || nowNode.second) {
				cout << nowNode.first->data;
				st.pop();
			}
			else {
				nowNode.second = true;
				p = nowNode.first->child[1];
			}
		}
	}
}
内容概要:本文档详细介绍了如何使用MATLAB实现粒子群优化算法(PSO)优化极限学习机(ELM)进行时间序列预测的项目实例。项目背景指出,PSO通过模拟鸟群觅食行为进行全局优化,ELM则以其快速训练强泛化能力著称,但对初始参数敏感。结合两者,PSO-ELM模型能显著提升时间序列预测的准确性。项目目标包括提高预测精度、降低训练时间、处理复杂非线性问题、增强模型稳定性鲁棒性,并推动智能化预测技术的发展。面对数据质量问题、参数优化困难、计算资源消耗、模型过拟合及非线性特征等挑战,项目采取了数据预处理、PSO优化、并行计算、交叉验证等解决方案。项目特点在于高效的优化策略、快速的训练过程、强大的非线性拟合能力广泛的适用性。; 适合人群:对时间序列预测感兴趣的研究人员、数据科学家以及有一定编程基础并希望深入了解机器学习优化算法的工程师。; 使用场景及目标:①金融市场预测,如股票走势预测;②气象预报,提高天气预测的准确性;③交通流量预测,优化交通管理;④能源需求预测,确保能源供应稳定;⑤医疗健康预测,辅助公共卫生决策。; 其他说明:文档提供了详细的模型架构描述MATLAB代码示例,涵盖数据预处理、PSO优化、ELM训练及模型评估等关键步骤,帮助读者全面理解实践PSO-ELM模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值