二叉树--先序、中序与后序遍历的非递归实现

    一般来说,能使用递归实现,也一定可以使用栈+迭代来实现,而这其实和层序遍历类似,只不过我们需要增加一些额外的标识来区分什么时候输出节点,什么时候入栈

目录

递归版本

标识

    创建Command类,其action标识当前遍历到的节点要执行的操作,node则为节点。约定如果action为next,则继续迭代,为write则输出

先根

    由于先根遍历的特点是"根--左--右",故我们入栈的顺序应该是"右-左-根"

中根

    由于中根遍历的特点是"左--根--右",故入栈的顺序应该为"右--根--左"。由于任意一个节点既可以表示根节点又可以表示左右子节点,故总是以当前节点标记为根节点

后根

    入栈为"根--右--左"才能保证遍历顺序是"左--右--根"

你可能感兴趣的:(二叉树--先序、中序与后序遍历的非递归实现)