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

2022-08-05 18:33:11 字數 1504 閱讀 8027

程式實現了用二叉樹的前序遍歷序列和中序遍歷序列重建二叉樹,**用python實現。

首先定義二叉樹節點的類:

1

class

treenode:

2def

__init__

(self, x):

3 self.val =x

4 self.left =none

5 self.right = none

二叉樹的前序遍歷順序為:根-左-右,中序遍歷順序為:左-根-右,因此可以根據前序序列準確地找到根節點,找到根節點之後,可以在中序序列中根據根節點的位置,區分出左右子樹的集合,分別列出左右子樹的前序序列和中序序列,然後重複這些操作,直到找到葉子結點,整個過程如下圖所示。重建是相同的操作在不同的子樹上重複執行的過程,因此**利用遞迴完成。

1

class

solution:

2def reconstructbinarytree(self, pre, tin):#

pre、tin分別是前序序列和中序序列3#

write code here

4if 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:])#

重建右子樹

9return root

可以採用層序輸出的方式驗證生成的二叉樹是否正確,用先進先出的佇列依次儲存層序遍歷到的節點(該方法在類solution下),然後遍歷每個節點的左子節點和右子節點,**實現如下

def

printfromtoptobottom(self, root):

ans=

if root==none:

return

ans

else

: q=[root]

while

q: node=q.pop(0)

ifnode.left:

ifnode.right:

return ans

python版本:3.6

4 根據前序和中序,重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍...

根據前序遍歷和中序遍歷重建二叉樹

package com study 根據二叉樹的前序遍歷和中序遍歷結果重建二叉樹 並輸出其頭節點。假設前序遍歷和中序遍歷結果中沒有重複數字...

根據前序和中序 構造二叉樹

假設前序 char pstr abdcef 中序為 char mstr dbaecf 構造該二叉樹 遞迴思想,首先前序遍歷的第一個一定是根結點,然後從中序遍歷中找到根節點所在的位置,這樣 就將中序分為左右子樹的兩部分,比如,首先找到先序的第一個 a 在中序遍歷中的位置,那麼 db ecf 就分別為 ...