二叉树的递归遍历
每次写递归,都按照这三要素来写:
1.确定递归函数的参数和返回值。
2.确定终止条件。
3.确定单层递归的逻辑。
递归代码简洁但是逻辑有些难以理解
以前序递归为例:遍历顺序是中左右。
先把当前节点的值加入res数组,后再分别将左子树按照同样的方式加入res,再将右子树加入res。如果当前的节点为空,结束递归。否则就一直将当前加入、将左子树加入、将右子树加入。
而三种不同的递归遍历方式只需调换三行代码的顺序即可。
二叉树的统一迭代法
因为不统一的迭代法容易记混,我以后只要用二叉树迭代遍历法,都用统一的写法。
因为栈的特点是先入后出,故压栈顺序和后面pop出的结果集顺序应该相反。前序遍历顺序是中左右,压栈顺序就应该是右左中。
将要处理的节点加入栈中,处理的节点在后面放入一个空节点,这样只有空节点弹出时候,才将下一个节点放入结果集。