二叉搜索树的前序、中序、后序遍历(非递归实现)

/*
用递归写二叉树的遍历是很容易的,但是用非递归的话实现就相对来说比较复杂了。
首先,递归的本质也是压栈出栈的过程,所以我们可以用一个栈来模拟系统的递归过程。
比如我们要打印如下的二叉树:
					1
				 /	  \
			   2		3
拿前序遍历来说,我们首先我访问1,然后访问1的左,然后访问1的右
我们可以用一个栈来记录我们的操作
首先我们要把访问1这个节点,所以我们要将访问1这个节点压栈
之后我们当这个栈不为空的时候,每次操作的都是栈顶的元素,如果栈顶元素的信息是访问这个节点,我们就将这个节点的访问右节点,访问左节点,打印节点以此入栈
go代表访问。print代表打印
|			|
|			|
|			|
|			|
|			|
|	go root	|
|-----------|	代表访问root节点
我们取出栈顶元素进行分析
访问root节点,完了之后访问root的左节点,之后访问root的右节点
但是我们压栈的顺序要相反,先压go right,最后压print node
|			|
|			|
|			|
| print	node|
|	go left	|
|	go right|
|-----------|
之后我们再从栈顶拿出一个元素,进行分析,如果是print,就进行打印,最后将栈顶元素弹出
|			|
|			|
|			|
| 			|
|	go left	|
|	go right|
|-----------|
打印:1
之后我们接着分析栈顶元素,go left代表访问root的左节点,如果是访问,我们就按照上面的操作以此接着压栈
|			 |
|print left  |
|left->left	 |
| left->right|
|			 |
|	go right |
|----------- |
按照这个过程,我们可以写出如下代码
*/
#include <iostream>
#include <stack>
#include <vector>
#include <cctype>
using namespace std;
//节点的定义
struct TreeNode {
   
    int val;
    TreeNode *left;
    TreeNode *right;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值