关于二分搜索树的非递归遍历问题

来源:6-9 二分搜索树前序遍历的非递归实现

丶远走高飞

2018-07-03

想问一下bobo老师关于后序非递归

http://img.mukewang.com/szimg/5b3b74430001f55405040367.jpg

我自己在网上查找了 前中后 三种非递归方式,其中 前序与后序 看的懂。

后序这个 我完全get不到这样写的点。。。

请老师解惑

写回答

1回答

liuyubobobo

2018-07-04

如果你已经学习了二叉树的前序遍历的非递归代码,仔细观察,其实这个代码就是一个“反向”的前序遍历代码。所谓的“反向”,是指对于每个节点,先找右子树,再找左子树:)


这样进行“反向”的前序遍历,最终得到的遍历结果(存储在了output中),再反转过来,就是后序遍历的结果:)这个翻转过程表现在最后的while循环中,output的元素是从后向前输出的(使用pop):)

0
4
liuyubobobo
回复
丶远走高飞
首先,先将这段代码的left换成right,right换成left,仔细观察(或者模拟,调试)一下,看看是不是就编程前序遍历了?明确一下,这段代码就是我所说的“反向前序遍历”。 之后,关键就变成了,为什么反向前序遍历的结果等于后续遍历?可以借助课程中所讲的每个节点有三个访问点来思考。前序遍历是按照左中右的顺序先左子树后右子树的访问每一个节点;“反向前序遍历”是右中左的顺序先右子树后左子树的访问每个节点。它和前序遍历是左右对称的!:)
2018-07-04
共4条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程