对于前序、中序、后序遍历,都是通过递归的方式,将未来需要用到的节点保存在栈中。
设有两个节点m和n,若m是n的祖先,则使用后序遍历可以找到m到n到路径。这是因为:
只有后序遍历,只要祖先节点的子孙节点没有遍历完成,该祖先就不能出栈,因此当遍历到n时,就可以根据栈保存的n的一系列祖先,回溯到m。
而如何n在m的右子树,m就会在前序和中序的过程中因为已经完成了访问左、访问根的任务,而被弹出栈,导致即使后面遍历到n的时候也找不到m了。只有后序才会让作为祖先的m一直保存。
对于前序、中序、后序遍历,都是通过递归的方式,将未来需要用到的节点保存在栈中。
设有两个节点m和n,若m是n的祖先,则使用后序遍历可以找到m到n到路径。这是因为:
只有后序遍历,只要祖先节点的子孙节点没有遍历完成,该祖先就不能出栈,因此当遍历到n时,就可以根据栈保存的n的一系列祖先,回溯到m。
而如何n在m的右子树,m就会在前序和中序的过程中因为已经完成了访问左、访问根的任务,而被弹出栈,导致即使后面遍历到n的时候也找不到m了。只有后序才会让作为祖先的m一直保存。