记录自己是怎么认识二叉树的前序、中序、后序遍历

偶然发现曾经了解的知识忘记了,现在用最朴素的语言写下来记录自己是怎么懂的。
首先记录自己是怎么认识二叉树的前序、中序、后序遍历
最重要的就是3个遍历顺序:
前序:根节点->左子树->右子树
中序:左子树->根节点->右子树
后续:左子树->右子树->根节点

这么看肯定很迷茫,下面以一个例子加深理解:
记录自己是怎么认识二叉树的前序、中序、后序遍历
现在一步步写出3种遍历结果(笔者自己的理解语言逻辑)

前序遍历:GDAFE MHZ: 要明确根-左-右 这个顺序,就是先写根,再写左边,最后再写右边。首先是根,G就是根不用多说,写下G。随后就是往左边就是D这条分支,D也是根,写下D。D往左就是A,A是根写下A,现在A下面没有了,往右分支F看。F是根,写下F。F往下左边是E,写下E。到此为止G左边遍历完了,现在看右边M。右边M是根,写下M。往左H,写下H。H下面没有了,现在看右边Z,Z是根,写下Z
记录自己是怎么认识二叉树的前序、中序、后序遍历
画了这么一个顺序图,其实简单来说就是每到一处根,就写下根,然后一直往左,左完了就返回上一个根,接着往右走,在上面的例子就是A完了往上走,走到D,D往下面的右边F继续,并记录F根,接着右往左走,走到E。差不多就是这么个思想,每个人有每个人的理解方式,我的理解方法就是用来给读者一个点拨的作用。

中序遍历:ADEFG HMZ: 左-根-右 先写左,再写根,最后写右。往左,左到底,期间补记录根节点,只记录最下面的左节点。比如图中的A,A往下没有了,就往上返回记录上面一个D。再接着往左到底,就是记录E。E下面没有了,所以再返回记录F,F右边下面也没有了,所以G的左边就记录完了,返回最大的根节点G,记录G。再开始M往左到底,记录H,H下面没有了,返回上一级M,记录M ,再往Z走,Z下面没有左右节点,所以记录Z
记录自己是怎么认识二叉树的前序、中序、后序遍历
后序遍历:AEFD HZMG左-右-根,先写左右的最后再写根,所以能发现G根节点写在最后。其实和中序遍历差不多,就是遇到根节点不记录,往左到底就是写下A。返回上一级却不记录D。随后再往左到底,就是写下E。E下面没有了,就只能返回记录根F。再返回就是根D,写下D。 再返回上一级G,经过G却不记录G。往左到底就是H,写下H。往上经过M,不写M。来到Z,Z往下没有了,写下Z。再返回上一级,写下M。最后返回最后一个根节点,写下G
记录自己是怎么认识二叉树的前序、中序、后序遍历
总结:笔者认为,记下
前序遍历:根节点->左子树->右子树(根->左->右)
中序遍历:左子树->根节点->右子树(左->根->右)
后序遍历:左子树->右子树->根节点(左->右->根)

只要记着前序是先写根,再写左,最后再写右。中序和后序就照着来就可以了。
最后来验证一下是否掌握这部分知识,笔者又找来一题:

记录自己是怎么认识二叉树的前序、中序、后序遍历
答案是:
前序:ABDGH CEIF
中序:GDHBA EICF
后序:GHDB IEFCA
当读者理解了,能写出正确的就明白笔者为什么在每行答案字母中写了一个空格。
总结了一下,发现笔者自己对这部分知识也清晰了很多。