81 - 判斷列表是否爲搜索二叉樹後序遍歷的結果

有一個整數型列表,判斷該列表是否爲對應二叉搜索樹的後序遍歷結果

'''
二叉搜索樹
二叉排序樹
二叉查找樹


前序遍歷
中序遍歷
後序遍歷

根節點

算法:
1. 找到根節點
2. 遍歷序列,找到第一個大於根節點的元素i,則i左側爲左子樹,右側爲右子樹
3. 判斷i右側的節點是否都比根節點大,如果有比根節點值小的節點,直接返回False
4. 否則用遞歸的方式繼續處理i左側和右側的節點
'''

def verifyBST(sequence):
    if not sequence:
        return False
    root = sequence[-1]
    i = 0
    for node in sequence[i:-1]:
        if node > root:
            break
        i += 1
    for node in sequence[i:-1]:
        if node < root:
            return False
    left = True
    if i > 0:
        left = verifyBST(sequence[:i])
    right = True
    if i < len(sequence) - 2 and left:
        right = verifyBST(sequence[i + 1:])
    return left and right

print(verifyBST([1, 4, 7, 6, 3, 13, 14, 10, 8]))
print(verifyBST([8, 3, 1, 6, 4, 7, 10, 14, 13]))
True
False

82 - 找出列表中出現次數超過列表長一半的元素

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章