python二叉樹基本操作


一. 二叉樹的定義:

      二叉樹是每個節點最多有兩個子樹的樹結構。它有五種基本形態:二叉樹可以是空集;根可以有空的左子樹或右子樹;或者左、右子樹皆為空。

     直白的講,二叉樹只由三部分組成:根,左子樹,右子樹

     但是,每個左子樹與右子樹同樣也可以把自己看作根,因此,他們也有自己的左子樹與右子樹

二叉樹相關詞語解釋:

  結點的度:結點擁有的子樹的數目

  葉子結點:度為0的結點(tips:在任意一個二叉樹中,度為0的葉子結點總是比度為2的結點多一個)

  分支結點:度不為0的結點

 

  樹的度:樹中結點的最大的度

  層次:根結點的層次為1,其余結點的層次等於該結點的雙親結點的層次加1

  樹的高度:樹中結點的最大層次

 

 

二。 二叉樹的性質:

性質1:二叉樹第i層上的結點數目最多為 2{i-1} (i≥1)。
性質2:深度為k的二叉樹至多2{k}-1個結點(k≥1)。
性質3包含n個結點的二叉樹的高度至少為log2 (n+1)
性質4:在任意一棵二叉樹中,若終端結點的個數為n0,度為2的結點數為n2,則n0=n2+1。

 

三。 二叉樹的分類:

滿二叉樹:樹內每一個節點都有左右兩個子樹。

完全二叉樹:只有最后一層缺結點,且要么全缺,要么只缺右結點。

 

四。 二叉樹的前中后序:

前中后序是三種遍歷二叉樹不同的方式

前序順序:根 左 右

中序順序:左 根 右

后序順序:左 右 根

下面舉個例子:

          圖片轉載自風一樣的碼農的博客

這個例子的三種順序分別是:

  前序:124563

  中序:425613

  后序:465231

 

 

 

此表達式在我們人腦中應是(中序):A+B*[C-(D+F)]/E

前序:+A/*B-C+DFE

后序:ABCDF+-*E/+

 

 五。 python遍歷二叉樹

# !/usr/bin/env python
# coding=utf-8

"""
python對二叉樹的基本操作: 1,創建   2,遍歷
"""


class TreeNode:
    def __init__(self, value=None, left=None, right=None):
        self.value = value
        self.left = left  # 左子樹
        self.right = right  # 右子樹


def preTraverse(root):
    '''
    前序遍歷
    '''
    if root == None:
        return
    print(root.value)
    preTraverse(root.left)
    preTraverse(root.right)


def midTraverse(root):
    '''
    中序遍歷
    '''
    if root == None:
        return
    midTraverse(root.left)
    print(root.value)
    midTraverse(root.right)


def afterTraverse(root):
    '''
    后序遍歷
    '''
    if root == None:
        return
    afterTraverse(root.left)
    afterTraverse(root.right)
    print(root.value)


if __name__ == '__main__':
    # root = TreeNode('D', TreeNode('B', TreeNode('A'), TreeNode('C')), TreeNode('E', right=TreeNode('G', TreeNode('F'))))
    # root = TreeNode('D', TreeNode('B', TreeNode('A'), TreeNode('C')), TreeNode('E', left=TreeNode('H',TreeNode('I'),TreeNode('J')),right=TreeNode('G', TreeNode('F'))))
    root = TreeNode('+',TreeNode('A'),TreeNode('/',TreeNode('*',TreeNode('B'),TreeNode('-',TreeNode('C'),TreeNode('+',TreeNode('D'),TreeNode('F')))),TreeNode('E')))
    print('前序遍歷:')
    preTraverse(root)
    print('\n')
    print('中序遍歷:')
    midTraverse(root)
    print('\n')
    print('后序遍歷:')
    afterTraverse(root)
    print('\n')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM