Python實現二叉樹的遍曆

來源:互聯網
上載者:User

標籤:例子   建二叉樹   不能   images   http   相交   組成   value   後序   

二叉樹是有限個元素的集合,該集合或者為空白、或者有一個稱為根節點(root)的元素及兩個互不相交的、分別被稱為左子樹和右子樹的二叉樹組成。
  • 二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。
  • 二叉樹的第i層至多有2^{i-1}個結點
  • 深度為k的二叉樹至多有2^k-1個結點;
  • 對任何一棵二叉樹T,如果其終端結點數為N0,度為2的結點數為N2,則N0=N2+1

首先構建二叉樹:

1 class Node:  2     def __init__(self,value=None,left=None,right=None):  3         self.value=value  4         self.left=left    #左子樹5         self.right=right  #右子樹

下面給出二叉樹的前序走訪/中序遍曆/後序遍曆

 1 def preTraverse(root):   2     ‘‘‘ 3     前序走訪 4     ‘‘‘ 5     if root==None:   6         return   7     print(root.value)   8     preTraverse(root.left)   9     preTraverse(root.right)  10 11 def midTraverse(root): 12     ‘‘‘13     中序遍曆14     ‘‘‘15     if root==None:  16         return  17     midTraverse(root.left)  18     print(root.value)  19     midTraverse(root.right)  20   21 def afterTraverse(root):  22     ‘‘‘23     後序遍曆24     ‘‘‘25     if root==None:  26         return  27     afterTraverse(root.left)  28     afterTraverse(root.right)  29     print(root.value)  

下面給出一個例子,驗證一下程式

 

 

 1 if __name__==‘__main__‘: 2     root=Node(‘D‘,Node(‘B‘,Node(‘A‘),Node(‘C‘)),Node(‘E‘,right=Node(‘G‘,Node(‘F‘)))) 3     print(‘前序走訪:‘) 4     preTraverse(root) 5     print(‘\n‘) 6     print(‘中序遍曆:‘) 7     midTraverse(root) 8     print(‘\n‘) 9     print(‘後序遍曆:‘)10     afterTraverse(root)11     print(‘\n‘)

輸出的結果為

前序走訪:DBACEGF中序遍曆:ABCDEFG後序遍曆:ACBFGED

那麼,如果我們已知二叉樹的前序走訪和中序遍曆,求這棵二叉樹的後序遍曆

 1 preList = list(‘12473568‘) 2 midList = list(‘47215386‘) 3 afterList = [] 4  5 def findTree(preList, midList, afterList): 6     if len(preList) == 0: 7         return 8     if len(preList) == 1: 9         afterList.append(preList[0])10         return11     root = preList[0]12     n = midList.index(root)13     findTree(preList[1:n + 1], midList[:n], afterList)14     findTree(preList[n + 1:], midList[n + 1:], afterList)15     afterList.append(root)

結果為:

[‘7‘, ‘4‘, ‘2‘, ‘5‘, ‘8‘, ‘6‘, ‘3‘, ‘1‘]
1 如果以上面的前序:DBACEGF和中序:ABCDEFG,得到的結果為:2 [‘A‘, ‘C‘, ‘B‘, ‘F‘, ‘G‘, ‘E‘, ‘D‘]

 

Python實現二叉樹的遍曆

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.