二叉树前序,中序,后序遍历的迭代实现,实现思路及代码

本文详细讲解了如何使用Java实现二叉树的非递归迭代遍历,包括前序、中序和后序遍历。通过示例代码阐述了利用栈进行回溯的过程,特别强调了后序遍历的实现难点在于判断回溯路径是否为右子树。
摘要由CSDN通过智能技术生成

用Java描述数据结构之二叉树,前序遍历,中序遍历,后序遍历这篇博客中我介绍了二叉树的相关概念和递归实现的二叉树的前中后序遍历。今天来介绍非递归迭代版遍历的思路及实现代码。
首先我们要明白所谓遍历就是集合中每个节点都要经过,就下面这棵树而言,我们从根节点开始要怎么走才能经过每个节点?

在这里插入图片描述
下面是上图树的构建代码:

public static TreeNode buildTree() {
   
        // 博客中所用到的树的构建
        TreeNode a = new TreeNode('a');
        TreeNode b = new TreeNode('b');
        TreeNode c = new TreeNode('c');
        TreeNode d = new TreeNode('d');
        TreeNode e = new TreeNode('e');
        TreeNode f = new TreeNode('f');
        TreeNode g = new TreeNode('g');
        TreeNode h = new TreeNode('h');

        a.left = b; a.right = c;
        b.left = d; b.right = e;
        c.left = f; c.right = g;
        e.right = h;

        return a;
    }

很明显我们要从根节点出发,左右都可以走,一般我们习惯往左走,我们一路向左走,直到走到没路可走,即cur == null,用代码实现这个是这样的:

//root为根节点
Treenode cur = root;

while(cur != null){
   
	cur = cur.left;
}

直到我们走到空之后,下一步该怎么办?

每个节点都有左右两个方向可走,我们选择一路向左,走到头之后我们应该退一步,然后向右走,然后再向左走,再走到尽头,往回走,向右走一步。。。。。。。就这样去探路。拿例子来演示如下:
在这里插入图片描述
从A出发向左走,到尽头之后退一步到B往B的右边走一步到E,继续向左走,走到头之后退一步到E,再向右走到H,继续向左走,走到尽头之后退一步。。。。。。
我们把上述过程中的退一步称为回溯,想要实现回溯我们就必须从刚开始向左走的过程中记录经过的每个节点,而这个回溯很明显具有后入先出的特性,这让我们想到用栈去记录(递归版遍历实际也是通过栈回溯,不过是java虚拟机栈,每一个栈帧都是以此方法的调用)每走到尽头之后回溯一个节点,然后往这个节点的右边走,就这样直到栈空了,也就遍历完了。代码实现如下:

		TreeNode cur = root;
        Stack<
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有裂痕的石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值