迭代法的思路是这样的,先把树的节点按照顺序放入栈,再pop出值并放入存放结果的数组中。
但是因为栈的形式是先进后出,所以push入栈的顺序需要调换。
前序遍历:中左右,比较容易理解。
中序遍历思路:顺序是左中右,所以要先放左,左放完之后每次出栈再判断右子节点是否为空,不为空就弹出当前并记录右子节点,直到右子节点也为空。栈中的顺序就应该是先把根节点放入,开始向左遍历,存放左子节点直到null,开始出栈,出栈遍历右子节点,右空时直接弹出,右不空时右子节点入栈,再进行出栈判断的过程。
后序遍历:左右中,就是中右左的数组做个反转,中右左与前序遍历一致。
后序遍历顺序 左-右-中 入栈顺序:中-左-右 出栈顺序:中-右-左, 最后翻转结果
中序遍历顺序: 左-中-右 入栈顺序: 左-右
前序遍历顺序:中-左-右,入栈顺序:中-右-左