二叉树的非递归遍历(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;
}
相关推荐
WangMing_X11 分钟前
《使用模块化分层来达到企业级项目要求》
开发语言·c#
爱学习的小鱼gogo1 小时前
python 矩阵中寻找就接近的目标值 (矩阵-中等)含源码(八)
开发语言·经验分享·python·算法·职场和发展·矩阵
可爱的秋秋啊1 小时前
简单网站编写
开发语言·前端
冬夜戏雪1 小时前
[学习日记][springboot 1-7][leetcode 6道]
java·开发语言·学习
红纸2811 小时前
Subword算法之WordPiece、Unigram与SentencePiece
人工智能·python·深度学习·神经网络·算法·机器学习·自然语言处理
QX_hao1 小时前
【Go】--数据类型
开发语言·后端·golang
星秀日1 小时前
框架--MyBatis
java·开发语言·mybatis
沐知全栈开发2 小时前
Ruby 条件判断
开发语言
_码力全开_2 小时前
JavaScript从入门到实战 (1):JS 入门第一步:它是什么?能做什么?环境怎么搭?
开发语言·前端·javascript·新人首发
captain3762 小时前
Java线性表
java·开发语言