二叉树的非递归遍历(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;
}
相关推荐
aischang13 分钟前
统信桌面专业版如何使用python开发平台jupyter
开发语言·python·jupyter·统信uos
狐凄35 分钟前
Python实例题:Python计算概率论
开发语言·python·概率论
liujing1023292935 分钟前
Day09_刷题niuke20250609
java·c++·算法
不7夜宵38 分钟前
力扣热题100 k个一组反转链表题解
算法·leetcode·链表
Bardb41 分钟前
02__C++的基本语法
c++·qt
q567315231 小时前
分布式增量爬虫实现方案
开发语言·分布式·爬虫·python
勤奋的知更鸟1 小时前
LLaMA-Factory和python版本的兼容性问题解决
开发语言·python·llama-factory
CIb0la1 小时前
Ai自动补全编程工具:llama vscode
运维·开发语言·学习·测试工具·程序人生
1candobetter1 小时前
JAVA后端开发——多租户
java·开发语言
freyazzr2 小时前
C++八股 | Day3 | 智能指针 / 内存管理 / 内存分区 / 内存对齐
开发语言·c++