【劍指offer23】二叉搜索樹、平衡二叉樹、滿二叉樹和完全二叉樹

二叉搜索樹

二叉查找樹(Binary Search Tree),(又:二叉搜索樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹:

  • 若其左子樹存在,則其左子樹中每個節點的值都不大於該節點值;
  • 若其右子樹存在,則其右子樹中每個節點的值都不小於該節點值。

注意:左子樹所有節點均要小於右子樹所有節點
題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
代碼

class Solution:
    def VerifySquenceOfBST(self, sequence):
        length = len(sequence)
        if length:
            root = sequence[-1]  # 找到根節點
            left = 0
            while sequence[left] < root:
                left += 1
            right = left
            while right < length - 1:
                if sequence[right] < root:
                    return False
                right += 1
            left_ret = True if left == 0 else self.VerifySquenceOfBST(sequence[:left])
            right_ret = True if left == right else self.VerifySquenceOfBST(sequence[left:right])
            return left_ret and right_ret
        return False
if __name__ == '__main__':
    s = Solution()
    print(s.VerifySquenceOfBST([4, 5, 8, 3, 9, 10, 7]))
    print(s.VerifySquenceOfBST([4, 5, 6, 3, 8, 9, 7]))

平衡二叉樹

平衡二叉樹(Balanced Binary Tree)具有以下性質:

  • 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
  • 平衡二叉樹的常用實現方法有紅黑樹、AVL、替罪羊樹、Treap、伸展樹等。 最小二叉平衡樹的節點的公式如下 F(n)=F(n-1)+F(n-2)+1 這個類似於一個遞歸的數列,可以參考Fibonacci數列,1是根節點,F(n-1)是左子樹的節點數量,F(n-2)是右子樹的節點數量。

滿二叉樹

高度爲h,由2^h-1個節點構成的二叉樹稱爲滿二叉樹。
在這裏插入圖片描述

完全二叉樹

完全二叉樹是由滿二叉樹而引出來的,若設二叉樹的深度爲h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數(即1~h-1層爲一個滿二叉樹),第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。
在這裏插入圖片描述

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