递归算法找到最小元素

时间:2013-04-05 19:05:24

标签: algorithm search recursion binary-tree

我想写一个递归算法来找到一个最小的元素。 我绘制了一个二叉树,其中叶子代表元素,内部节点是比较后的最小元素。

algo的输入是:

5 3 1 9 8 7 6 10

二叉树:

enter image description here

输出:1

我需要找到一种以某种方式合并这个二叉树的算法。首先比较一对元素,然后将问题减少到n / 2然后n / 4 ..当n变为1时,我们得到答案。

3 个答案:

答案 0 :(得分:2)

这是一个在树中找到最小值的函数:

function smallest(tree)
    if isEmpty(tree)
        return infinity
    return min( tree.value,
                smallest(tree.leftKid),
                smallest(tree.rightKid) )

但我不明白你的问题。如果输入采用数组的形式,则无需构建树。只需按顺序遍历数组比较值,在每一步保持最小值,并在结束时输出最小值。

答案 1 :(得分:2)

使用divide and conquer

M(i, j)表示“子阵列”[i...j]的最小元素。然后是M(i, j) = min(M(i, k), M(k + 1, j)),如果i < j(我留给你找出合适的k)。

此外,您需要处理案例i = j

答案 2 :(得分:0)

伪代码:

mydata = [5 3 1 9 8 7 6 10];
n = 8;
while n > 1
  for ii = 2 to n Step 2
    mydata[ii/2]=min(mydata[ii-1],mydata[ii]);
  next ii
  n = n/2;
wend