二叉搜索樹
二叉查找樹(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 層所有的結點都連續集中在最左邊,這就是完全二叉樹。