天天看點

【算法】二叉樹_分類

       在這篇部落格中(https://blog.csdn.net/qq_33432841/article/details/108081027)已經講解了二叉樹的一些特點、性質、周遊順序等。在這篇部落格中,準備寫點二叉樹的分類的相關知識。

二叉樹分類主要包括:斜樹、滿二叉樹、完全二叉樹、二叉查找樹、平衡二叉樹等(還會更新哦!)

斜樹:

  • 所有的結點都隻有左子樹的二叉樹叫左斜樹;
  • 所有結點都是隻有右子樹的二叉樹叫右斜樹;

      上面的左斜樹和右斜樹統稱為斜樹。

【算法】二叉樹_分類
【算法】二叉樹_分類

滿二叉樹:

      在一棵二叉樹中。如果所有分支結點都存在左子樹和右子樹,并且所有葉子都在同一層上,這樣的二叉樹稱為滿二叉樹。

      滿二叉樹必須滿足:

  • 總的結點個數2^k-1個結點; 
  • 第i層的結點個數數為2^(k-1)個結點;
  • 具有n個節點的滿二叉樹的深度為
    【算法】二叉樹_分類

      滿二叉樹的特點:

  • 葉子隻能出現在最下一層。出現在其它層就不可能達成平衡。
  • 非葉子結點的度一定是2。
  • 在同樣深度的二叉樹中,滿二叉樹的結點個數最多,葉子數最多。
【算法】二叉樹_分類

完全二叉樹:

       其和滿二叉樹不同的是最後一層不是滿的,除了最了一層,其餘的k-1層是一個滿二叉樹,最後一層的結點是從左開始排列的。(滿二叉樹是特殊的完全二叉樹,但完全二叉樹不一定是滿二叉樹)。

【算法】二叉樹_分類

   完全二叉樹必須滿足:

  • 某個節點沒有左子節點,那麼肯定也不能有右子節點
  • 從第1層到第k-1層是一個滿二叉樹,最後一層的結點從左開始排列。

   完全二叉樹的特點:

  • 葉子結點隻能出現在最下層和次下層。
  • 最下層的葉子結點集中在樹的左部。
  • 倒數第二層若存在葉子結點,一定在右部連續位置。
  • 如果結點度為1,則該結點隻有左孩子,即沒有右子樹。
  • 同樣結點數目的二叉樹,完全二叉樹深度最小。

    備注:滿二叉樹一定是完全二叉樹,但反過來不一定成立。

二叉查找樹:

       二叉查找樹(Binary Search Tree)(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值; 它的左、右子樹也分别為二叉排序樹。

【算法】二叉樹_分類

     二叉查找樹必須滿足:

  • 所有子樹上面的左節點的值都比根結點要小,右節點的值都比根結點要大 
  • 任意結點的左右子樹也都是二叉查找樹
  • 通過中序周遊,将得到的是一個有序的數列

對其操作的最優的時間複雜度為O(log2n),相當于對數列進行二分查找法。最壞的時間複雜度為O(n),相當于線性查找。

平衡二叉樹:

        平衡二叉樹(Balanced Binary Tree)又被稱為AVL樹(有别于AVL算法),它是二叉查找樹最優的情況。它很好的解決了二叉查找樹退化成連結清單的問題,把插入,查找,删除的時間複雜度最好情況和最壞情況都維持在O(logN)。但是頻繁旋轉會使插入和删除犧牲掉O(logN)左右的時間,不過相對二叉查找樹來說,時間上穩定了很多。

        在AVL樹中,任一節點對應的兩棵子樹的最大高度差為1,是以它也被稱為高度平衡樹。

【算法】二叉樹_分類

這種左右子樹的高度相差不超過 1 的樹為平衡二叉樹。

        平衡二叉樹具有以下性質:

  • 它是一個二叉查找樹
  • 它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。
  • 當删除、新增、修改節點上的值時,它會通過左旋或右旋的操作使二叉樹保持平衡。
  • 最壞的時間複雜度為O(log2n)

       在平衡二叉樹裡面有一個隐含的知識點:平衡因子

       定義:某節點的左子樹與右子樹的高度(深度)差即為該節點的平衡因子(BF,Balance Factor),平衡二叉樹中不存在平衡因子大于 1 的節點。在一棵平衡二叉樹中,節點的平衡因子隻能取 0 、1 或者 -1 ,分别對應着左右子樹等高,左子樹比較高,右子樹比較高。

下面一篇部落格寫平衡二叉樹(ALV樹)的一些插入相關的知識點。

                 不後悔過去,不幻想未來,把握好現在,就是對自己最好的交代!!!!!!!!!!!!

繼續閱讀