一. 二叉樹的定義:
二叉樹是每個節點最多有兩個子樹的樹結構。它有五種基本形態:二叉樹可以是空集;根可以有空的左子樹或右子樹;或者左、右子樹皆為空。
直白的講,二叉樹只由三部分組成:根,左子樹,右子樹
但是,每個左子樹與右子樹同樣也可以把自己看作根,因此,他們也有自己的左子樹與右子樹
二叉樹相關詞語解釋:
結點的度:結點擁有的子樹的數目
葉子結點:度為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')