从堆中打印父项的左右子项。

时间:2017-05-24 02:49:33

标签: python

我有一个列表,代表下面的堆显示。

L = [8,4,7,2,3,1] 

我需要编写一个函数,要求用户输入父级的位置,然后该函数将打印父级,左子级和右级子级的值,如果父级没有子级,则打印为false。

我尝试了以下代码,但是我得到了一个错误。

position = int(input("Enter the position: "))

L = [8,7,2,3,1]

print("Parent:",heapList[position])

def children(L, position):
    for i in L:
        if L[2*i+1] not in L:
            return False
        else:
            print("Left Child",L[2*i+1])

children(L, position)

当用户输入0作为位置输入时,输出的示例应如下所示:

Parent: 8
Left child: 4
Right child: 7

2 个答案:

答案 0 :(得分:0)

您可以通过对真值语句使用这些函数来避免循环。

def has_childern(self):
    return self.right_child or self.left_child

def has_both_childern(self):
    return self.right_child and self.left_child

然后只使用嵌套的if作为示例。

if current_node.has_both_childern():
...
elif current_node.has_left_child():
...

答案 1 :(得分:0)

代码应如下所示:

L_heap = [8,4,7,2,3,1]
def children(L, position):
    if position > len(L) - 1 :
       print("There is no node at this heap position", position)
       return
    else:
       print("Parent", L[position]
    if (2*position+1) > len(L)-1:
        print("No childs")
        return
    else:
        print("Left Child",L[2*position+1])
        if not((2*position+2) > len(L)-1):
           print("Right Child",L[2*position +2])
    return

children(L_heap, 0)
children(L_heap, 5)
children(L_heap, 3)
children(L_heap, 8)

输出:

Parent 8
Left Child 4
Right Child 7
Parent 1
No childs
Parent 2
No childs
There is no node at this heap position 8