樹是一類重要的非線性數據結構,是以分支關係定義的層次結構node
定義:python
樹(tree)是n(n>0)個結點的有限集T,其中: 有且僅有一個特定的結點,稱爲樹的根(root)數據結構
當n>1時,其他結點可分爲m(m>0)個互不相交的有限集T1,T2,……Tm,其中每個集合自己又是一棵樹,稱爲根的子樹(subtree)app
特色: 樹中至少有一個結點——根 樹中各子樹是互不相交的集合rest
基本術語code
結點(node)——表示樹中的元素,包括數據項及若干指向其子樹的分支blog
結點的度(degree)——結點擁有的子樹數 葉子(leaf)——度爲0的結點it
孩子(child)——結點子樹的根稱爲該結點的孩子class
雙親(parents)——孩子結點的上層結點叫該結點的~二叉樹
兄弟(sibling)——同一雙親的孩子
樹的度——一棵樹中最大的結點度數
結點的層次(level)——從根結點算起,根爲第一層,它的孩子爲第二層……
深度(depth)——樹中結點的最大層次數
森林(forest)——m(m0)棵互不相交的樹的集合
二叉樹是有限個元素的集合,該集合或者爲空、或者有一個稱爲根節點(root)的元素及兩個互不相交的、分別被稱爲左子樹和右子樹的二叉樹組成。
實現方法
class Node: def __init__(self,value=None,left=None,right=None): self.value=value self.left=left #左子樹 self.right=right #右子樹 def preTraverse(root, res=[]): ''' 前序遍歷 ''' if root==None: return res.append(root.value) preTraverse(root.left, res) preTraverse(root.right, res) return res def midTraverse(root, res=[]): ''' 中序遍歷 ''' if root==None: return midTraverse(root.left, res) res.append(root.value) midTraverse(root.right) return res def afterTraverse(root, res=[]): ''' 後序遍歷 ''' if root==None: return afterTraverse(root.left) afterTraverse(root.right) res.append(root.value) return res def traverse(root, res=[]): ''' 層次遍歷 ''' if root==None: return delroot = [root] while delroot: current = delroot.pop(0) res.append(current.value) if current.left: delroot.append(current.left) if current.right: delroot.append(current.right) return res if __name__=='__main__': root=Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',Node('F')))) print('前序遍歷:') print(preTraverse(root)) print('中序遍歷:') print(midTraverse(root)) print('後序遍歷:') print(afterTraverse(root)) print('層次遍歷:') print(traverse(root))
前序遍歷: ['D', 'B', 'A', 'C', 'E', 'G', 'F'] 中序遍歷: ['A', 'B', 'C', 'D', 'E', 'F', 'G'] 後序遍歷: ['A', 'C', 'B', 'F', 'G', 'E', 'D'] 層次遍歷: ['D', 'B', 'E', 'A', 'C', 'G', 'F']