题目描述:给定一个二叉树,返回它的 后序 遍历。
示例:如下图二叉树的后序遍历结果为 {4,5,2,6,7,3,1};
解析:递归一种,非递归两种
method 1:递归
递归的方法很简单,递归就完事了;
method 2:栈的后序遍历(非递归)
这个方法就是利用栈来保存下一次需要访问到的节点,但是再后序遍历中我们需要一些特殊的标记,来防止其的重复进出栈;具体操作请看下图(以上图示例为例);
接下来多次循环,一个完整的非递归后序遍历就结束了。
method 3:反栈后序遍历(非递归)
我们再上个非递归的方法中可以看出,后序遍历是本着从下往上和从左往右的方向进行,那么我们这个方法的思路就来了;我们就可以从上往下再从右往左进行遍历,然后将遍历的结果进行逆置即可;
就如上图这样遍历完之后的输出结果为{1,3,7,6,2,5,4} 逆置完之后就是{4,5,3,6,7,3,1}这就是后序遍历的结果了。