迭代:前中后序遍历;前中后是处理中间节点的顺序。
中间节点:处理操作放在中间节点这块。
左右节点:用来向下遍历
求二叉树深度:用前序遍历(中左右),深度是从上往下计算(根节点是1,下面依次是2,3,4.....),所以要记录深度的话,中间节点要依次向下处理(深度增加的方向),处理完再向下遍历(中左右),所以是用前序遍历比较方便。
求二叉树高度:用后序遍历(左右中),高度是从下往上计算(叶子节点是1,上面依次是2,3,4....),所以要记录高度的话,中间节点要依次向上返回迭代(高度增加的方向),处理完向上返回迭代(左右中)。所以要先向下递归遍历到最底层(叶子节点),再依次向上返回中间节点的处理操作,所以用后序遍历。
例子1:比如判断一个二叉树是不是平衡二叉树,就要求左右子树的高度,然后再在中间节点判断是否相差超过1,就用后续遍历。
例子2:如果求二叉树的最大深度,用前序遍历。但其实根节点的高度和二叉树的最大深度是一样的,所以也可以用后序遍历。
前中后统一迭代写法:用栈stack处理数据,把中间节点压入栈后,要紧跟把null压入栈,这里null用来判断弹出。
层序遍历:用队列queue处理数据,注意每一层的size不一样,是动态的。
递归:1.判断返回类型和传入参数; 2.判断结束递归条件; 3.写单层逻辑。