合并中的递归排序,快速排序和树遍历
问题描述:
虽然学习不同的算法(如合并排序,快速排序或树遍历),但我观察到有两个递归调用紧跟在一起。合并中的递归排序,快速排序和树遍历
我无法完全理解。请简单地解释为什么我们使用两个递归调用?这是什么样的模式?
也有任何算法,其中有超过两个立即递归调用?
归并排序
m_sort(数字,温度,左,中); (数字,temp,mid + 1,right);
树遍历
预购(node.left)
预购(node.right)
答
有两个递归调用,因为同样的功能需要在两个不同的地方进行。在从根开始的树遍历的情况下,您想要递归地沿着左边,然后向右下。函数调用的方式工作,F
调用preorder(node.left)
并且对preorder(node.right)
一无所知。当它进入node.left
它现在在B
。直到最后的A
,一直进行相同的递归调用。当预订(node.left)从A
然后返回时,B
中的代码调用preorder(node.right)
并且递归将继续。
这不是一个模式,因为在许多二进制结构上执行递归工作的本质,其中分而治之策略适用于将工作分成更小的部分,然后对每个部分执行递归seperately直到琐碎情况下被满足(例如,没有子女作为A
的节点,当它返回)
来源: “Sorted binary tree preorder” 由Sorted_binary_tree.svg:Miles衍生物工作:Pluke(talk) - Sorted_binary_tree.svg。经由Wikimedia Commons在公共领域授权。