合并排序,快速排序和遍历树的递归

时间:2015-02-07 23:31:18

标签: algorithm sorting recursion tree

虽然学习了不同的算法(如合并排序,快速排序或树遍历),但我发现有两个递归调用紧跟在一起。

我无法完全理解。请用简单的术语解释为什么我们使用两个递归调用?这有什么样的模式吗?

还有哪些算法可以进行两次以上的立即递归调用?

合并排序

m_sort(数字,临时,左,中);

m_sort(数字,临时,中间+ 1,右);

树遍历

预订(node.left)

序(node.right)

1 个答案:

答案 0 :(得分:1)

有两个递归调用,因为需要在两个不同的地方执行相同的功能。在从根开始的树遍历的情况下,您希望递归地向左下行,然后向右下行。函数调用的方式,F调用preorder(node.left)并且对preorder(node.right)一无所知。当它进入node.left时,它现在位于B。同样的递归调用将一直进行到A的底部。当preorder(node.left)从A 返回时,B中的代码会调用preorder(node.right),递归将继续。

这不是一种模式,而是在许多二元结构上进行递归工作的本质,其中分而治之的策略适用于将工作分成更小的部分,然后分别对每个部分执行递归直到满足琐碎的情况(例如A中没有子节点的节点,当它返回时)

pre-order traversal from wikipedia

来源:“Sorted binary tree preorder”按Sorted_binary_tree.svgMiles衍生作品:Pluketalk) - Sorted_binary_tree.svg。通过Wikimedia Commons在公共域下获得许可。