二叉树的非递归遍历(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;
}
相关推荐
小叶学C++11 分钟前
【C++】类与对象(下)
java·开发语言·c++
ac-er888812 分钟前
PHP“===”的意义
开发语言·php
Funny_AI_LAB21 分钟前
MetaAI最新开源Llama3.2亮点及使用指南
算法·计算机视觉·语言模型·llama·facebook
NuyoahC28 分钟前
算法笔记(十一)——优先级队列(堆)
c++·笔记·算法·优先级队列
jk_10131 分钟前
MATLAB中decomposition函数用法
开发语言·算法·matlab
weixin_4640780731 分钟前
C#串口温度读取
开发语言·c#
无敌の星仔33 分钟前
一个月学会Java 第2天 认识类与对象
java·开发语言
豆豆1 小时前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
penguin_bark1 小时前
69. x 的平方根
算法
FL16238631291 小时前
[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型
c++·opencv·yolo