非递归实现树的前中后序遍历

前序遍历

思路:用栈实现,头节点入栈。
节点出栈,子节点入栈(可以没有);重复一直到栈为空。

中序遍历

思路:两个栈实现,头节点入栈1。
操作:
如果节点有孩子,那么出栈1,就入栈2,将左孩子入栈1;
如果节点没有孩子,那么出栈1的时候直接输出,然后输出一个栈2的节点并将其右孩子入栈。

后序遍历

思路:用一个栈和一个map实现;
map用于标记节点是否已经将孩子入栈。
初始化:头节点入栈,map全部为空。
操作: 检查栈顶是否有孩子,如果没有直接输出,如果有则检查set中是否有【栈顶元素】,如果没有,则将栈顶加入并将孩子入栈,如果set中有,那么输出。

你可能感兴趣的:(算法)