二叉树的非递归遍历(c++)

前序

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-preorder-traversal/description/

1---2---4---5---3---6---7

思想:

中左右

1.先访问左路结点

2.左路结点入栈

3.取栈中结点访问其右子树。

代码:

cpp 复制代码
vector<int> preorderTraversal(TreeNode* root) {
	//访问一棵树分成两个部分
	//1.访问左路结点,左路节点入栈
	//2.取栈中的结点访问其右子树
	vector<int> v;
	stack<TreeNode*> st;
	TreeNode* cur = root;
	while (cur || !st.empty())//cur||!st.empty()
	{
		while (cur)
		{
			v.push_back(cur->val);//访问左路结点
			st.push(cur);//左路节点入栈
			cur = cur->left;
		}
		TreeNode* Top = st.top();//取栈中的结点访问其右子树
		st.pop();
		cur = Top->right;
	}
	return v;
}

中序

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/implement-stack-using-queues/

4---2---5---1---6---3---7

左中右

1.将左路结点全部入栈

2.先访问栈顶节点

3.访问栈顶结点的右子树。

cpp 复制代码
vector<int> inorderTraversal(TreeNode* root)
{
	vector<int> v;
	stack<TreeNode*> st;
	TreeNode* cur = root;
	while (cur || !st.empty())
	{
		while (cur)
		{
			st.push(cur);
			cur = cur->left;
		}
		TreeNode* Top = st.top();
		v.push_back(Top->val);
		st.pop();
		cur = Top->right;
	}
	return v;
}

后序

4---5---2---6---7---3---1

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-postorder-traversal/description/

中左右---中右左---左右中

左右中

1.先访问右路结点

2.右路结点入栈

3.取栈中结点访问其左子树

4.最后将数组反转即可

cpp 复制代码
vector<int> postorderTraversal(TreeNode* root)
{
	vector<int> v;
	stack<TreeNode*> st;
	TreeNode* cur = root;
	while (cur || !st.empty())//cur||!st.empty()
	{
		while (cur)
		{
			v.push_back(cur->val);//访问右路结点
			st.push(cur);//右路节点入栈
			cur = cur->right;
		}
		TreeNode* Top = st.top();//取栈中的结点访问其左子树
		st.pop();
		cur = Top->left;
	}
	reverse(v.begin(),v.end());
	return v;
}
相关推荐
To_OC1 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
benchmark_cc2 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
renhongxia13 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
程序员无隅3 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
Python+994 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
二炮手亮子4 小时前
浅记java线程池
java·开发语言
zmzb01034 小时前
C++课后习题训练记录Day157
开发语言·c++
dunge20264 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
zephyr055 小时前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米6 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法