二叉树的后序遍历,非递归

如果只用一个堆栈,且不记录节点的标志位(比如有没有访问过左/右子树),能实现吗?(大致说下思路就行)不是线索树,没有头节点,只有指向根节点的指针;某个节点没有左/右子树那... 如果只用一个堆栈,且不记录节点的标志位(比如有没有访问过左/右子树),能实现吗?
(大致说下思路就行)
不是线索树,没有头节点,只有指向根节点的指针;某个节点没有左/右子树那个指针就是NULL
展开
 我来答
chiconysun
2013-11-18 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2595万
展开全部
后序遍历的非递归步骤类似于中序遍历,在遍历左子树前将根结点指针送入栈中
但是左子树遍历完成后,无法访问根结点,只有在右子树遍历完后,才能访问根结点

如果不使用标志位区分第几次到达根结点,可以利用如下的后序遍历特征来完成:
当栈顶元素(根)的右子树为空(即:无右孩子),或者是右子树非空但是已遍历完,即右孩子恰好是刚才访问过的结点,此时应访问栈顶结点,并在访问后退栈
否则,如果栈顶元素的右孩子非空且未遍历,此时直接访问栈顶元素的右孩子而不退栈

算法要点只是需要记住最近访问过的结点即可,也就是每次访问一个结点后,就记住这个结点
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式