日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用前序和中序重建二叉树 python

發布時間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用前序和中序重建二叉树 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 ans

python版本:3.6

?

?

轉載于:https://www.cnblogs.com/bambipai/p/9750712.html

總結

以上是生活随笔為你收集整理的用前序和中序重建二叉树 python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。