如何递归地打印堆中的节点

时间:2018-03-29 14:02:43

标签: python heap

将堆作为带键的数组,如何打印所有键?到目前为止,我得到了

def heapPrint (arr,i):
    if (len(arr) == 0 or len(arr) == 1):
        return
    if (left(i) > len(arr) or right(i) > len(arr)):
        return
    if (left(i) < len(arr) and right(i) < len(arr):
        print (arr[left(i)],arr[right(i)])
    heapPrint (arr,left(i))
    heapPrint (arr,right(i))

有没有更好的解决方案,我只能打印1个节点而不是2个节点?感谢

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找类似的东西:

def heapPrint(arr, i)
    # if the index is larger than the heap length
    if i >= len(arr):
        return;

    # if it's a leaf node, then return
    if left(i) >= len(arr) and right(i) >= len(arr):
        return

    if left(i) < len(arr):
        print(arr[left(i)], end=' ')
    if right(i) < len(arr):
        print(arr[right(i)], end='')
    print('')

    # these calls will return immediately if the
    # index is too large.
    heapPrint(arr, left(i))
    heapPrint(arr, right(i))

我的python技能很少,因此可能存在一些语法错误,但这是基本的想法。