用前序和中序重建二叉树 python
生活随笔
收集整理的這篇文章主要介紹了
用前序和中序重建二叉树 python
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序實現了用二叉樹的前序遍歷序列和中序遍歷序列重建二叉樹,代碼用python實現。
首先定義二叉樹節點的類:
1 class TreeNode: 2 def __init__(self, x): 3 self.val = x 4 self.left = None 5 self.right = None? ? ? ?二叉樹的前序遍歷順序為:根-左-右,中序遍歷順序為:左-根-右,因此可以根據前序序列準確地找到根節點,找到根節點之后,可以在中序序列中根據根節點的位置,區分出左右子樹的集合,分別列出左右子樹的前序序列和中序序列,然后重復這些操作,直到找到葉子結點,整個過程如下圖所示。重建是相同的操作在不同的子樹上重復執行的過程,因此代碼利用遞歸完成。
1 class Solution: 2 def reConstructBinaryTree(self, pre, tin):#pre、tin分別是前序序列和中序序列 3 # write code here 4 if len(pre)>0: 5 root=TreeNode(pre[0])#前序序列的第一個肯定是當前子樹的根節點 6 rootid=tin.index(root.val)#通過根節點在中序序列中的位置劃分出左右子樹包含的節點 7 root.left=self.reConstructBinaryTree(pre[1:1+rootid],tin[:rootid])#重建左子樹 8 root.right=self.reConstructBinaryTree(pre[1+rootid:],tin[rootid+1:])#重建右子樹 9 return root
? ? ? 可以采用層序輸出的方式驗證生成的二叉樹是否正確,用先進先出的隊列依次保存層序遍歷到的節點(該方法在類Solution下),然后遍歷每個節點的左子節點和右子節點,代碼實現如下
def PrintFromTopToBottom(self, root):ans=[]if root==None:return anselse:q=[root]while q:node=q.pop(0)ans.append(node.val)if node.left:q.append(node.left)if node.right:q.append(node.right)return anspython版本:3.6
?
?
轉載于:https://www.cnblogs.com/bambipai/p/9750712.html
總結
以上是生活随笔為你收集整理的用前序和中序重建二叉树 python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: I/O流的概念和流类库的结构
- 下一篇: Python学习之路 拓展篇