二叉树的前序遍历、中序遍历、后续遍历的递归方法代码较少,思路就是方法的压栈出栈过程。
它的非递归写法其实就是使用了递归遍历的思想,采用栈的结构,也就是说非递归写法写的是递归写法函数调用入栈出栈的过程。
前序遍历:节点输出并入栈,无左节点出栈,出栈不输出,如果有右节点则继续入栈,否则继续出栈,直到栈为空。
中序遍历:节点入栈,无左节点出栈,出栈输出,如果有右节点则继续入栈,不输出,循环该过程,直到栈为空。
后续遍历:左右节点都为空时,才输出。入栈时需要有个辅助类数组记录栈内每个节点左右节点遍历次数count,count初始为0,相当于每个节点左右为空时输出,每个节点输出,其栈顶节点相应+1,表示该节点已经遍历过左节点了,当count=2时,输出该栈元素,相应的新的栈顶继续加1。