[英]Generate the post-order traversal given the in-order and pre-order traversal
我看到代码发布在这里: 给定有序和后序遍历,如何输出树的前序遍历?
但是,我在理解逻辑时遇到了麻烦,尤其是对于树的正确部分的递归:
postorder(preorder, prestart+i-inostart+1, inorder, i+1, length-i+inostart-1);
任何帮助,将不胜感激。
假定二元表达式树以及有序,前顺序和后顺序遍历如何作用于它:
inorder
:左子树,当前根,右子树 preorder
:当前根,左子树,右子树 postorder
:左子树,右子树,当前根 现在是当前代码,首先标识左和右子树。 如我们所知,前置数组的第一个元素是我们的根,我们可以在有序数组中找到对应的根。 我们知道,根之前的所有元素都是左子树的元素,根之后的所有元素都是右子树的元素。
我们想产生后序遍历,所以我们递归地继续左子树:
postorder(preorder, prestart+1, inorder, inostart, i-inostart);
然后是右子树:
postorder(preorder, prestart+i-inostart+1, inorder, i+1, length-i+inostart-1);
然后输出我们当前的根目录:
cout<<preorder[prestart]<<" ";
递归地执行此操作将导致该树的后序遍历。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.