程式實現了用二叉樹的前序遍歷序列和中序遍歷序列重建二叉樹,**用python實現。
首先定義二叉樹節點的類:
1二叉樹的前序遍歷順序為:根-左-右,中序遍歷順序為:左-根-右,因此可以根據前序序列準確地找到根節點,找到根節點之後,可以在中序序列中根據根節點的位置,區分出左右子樹的集合,分別列出左右子樹的前序序列和中序序列,然後重複這些操作,直到找到葉子結點,整個過程如下圖所示。重建是相同的操作在不同的子樹上重複執行的過程,因此**利用遞迴完成。class
treenode:
2def
__init__
(self, x):
3 self.val =x
4 self.left =none
5 self.right = none
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下),然後遍歷每個節點的左子節點和右子節點,**實現如下
defpython版本:3.6printfromtoptobottom(self, root):
ans=
if root==none:
return
ans
else
: q=[root]
while
q: node=q.pop(0)
ifnode.left:
ifnode.right:
return ans
根據前序和中序重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。include include include include define n 100 using namespace std s...
根據前序和中序重建二叉樹
解題思路 根據前序遍歷的特點 根,左,右 得出前序遍歷的第乙個節點就是整棵樹的根 根據中序遍歷的特點 左,根,右 找到中序遍歷中和根節點相同的節點,也就是根節點的位置 在中序中,根節點左邊的為整棵樹的左子樹,根節點後邊的為整棵樹的右子樹,同時也就確定了左右子樹的數量 在前序遍歷和中序遍歷中劃分了左右...
根據前序和中序,重建二叉樹
具體的思路就是遞迴,遍歷中序陣列,在前序中找相同的。因為前序是 根左右 而中序是 左根右 所以中序中匹配的前序數字的前面所有數字都是該樹的左節點,而後面的數字就是該樹的右節點 這裡是主要的邏輯 node node newnode preorder prestart for int i instart...