【数据结构】在二叉树中有两个结点m和n,若m是n的祖先,则使用后序遍历可以找到从m到n的路径
分析:首先要明白,找到m到n的路径,指的不是遍历序列中的那个序列,而是直接得到n到m需要经过那些结点
比如下图:
中序序列(LNR)是:213m7584n69:m7584n确实包含了m到n的路径,但是夹杂了很多别的元素,并不是我们要的路径
那要怎么得到m到n的路径呢?
由三种遍历方式的非递归算法构造时借助了栈可以想到
——使用栈求两结点的路径
以上图二叉树为例,下面将分析三种遍历时的栈的变化:
1.先序遍历(NLR)
补充:注意访问是访问它的值,并加入到先序遍历的序列中,出栈和遍历序列无关;
先序遍历是入栈前访问,中序遍历是先入栈,出栈时访问;
右子树不空时,访问右孩子,将右子树的根作为新的根,执行①;
先序遍历和中序遍历只有访问位置不同的区别(即是在入栈前访问还是在出栈时访问)
所以先序序列不可以找到m到n的路径
2.中序遍历(LNR)
所以中序序列也不可以找到m到n的路径