代码随想录算法训练营第14天|144.二叉树的前序遍历、94二叉树的中序遍历、145.二叉树的后序遍历

以前一直用的递归遍历,都不知道有迭代遍历的方法,今天写一篇博客记录一下。

现在讲的迭代遍历都基于栈,通过遍历特性来设计出栈入栈操作。

前序遍历:众所周知前序遍历的顺序是根左右。所以在迭代遍历中直接将根节点放进返回容器,然后将根节点的右节点、左节点放入栈中,注意遍历顺序是左右,所以要先将右节点入栈,然后再将左节点入栈,这样才能保证左节点是先出栈的。

先说简单巧妙的后序遍历:后序遍历顺序是左右根,只用将前序遍历代码改成根右左然后反转一下就行(这种操作确实很妙,看到的时候被震撼到了)

中序遍历:遍历顺序 左根右。感觉整个流程和递归法很像。需要先遍历到树左侧的叶子节点,在遍历过程中将遍历过的节点入栈。然后将左叶子节点加入到返回容器中。之后再将根节点加入返回队列,之后处理右节点。最后再处理右半边的节点,流程和上面差不多。

你可能感兴趣的:(算法,数据结构,c++)