1. 程式人生 > >已知先序遍歷和中序遍歷,輸出後序遍歷

已知先序遍歷和中序遍歷,輸出後序遍歷

已知先序遍歷和中序遍歷,輸出後序遍歷

題目描述

對於一棵二叉樹,已知先序遍歷ACDEFHGB,中序遍歷DECAHFBG,求後序遍歷。

解題思路

首先條件給出了先序遍歷和中序遍歷,那麼我們利用這兩種遍歷特性得到一下資訊:

  • 對於先序遍歷,第一個節點是根節點
  • 對於中序遍歷,根節點的左邊是左子樹節點,右邊是右子樹節點

利用以上資訊我們就可以利用遞迴構建出二叉樹,然後通過後序遍歷得到結果

Python程式碼如下

class TreeNode:
    def __init__(self,x):
        self.val = x
        self.left =None
        self.right =None
class Solution:
    #返回構造的TreeNode根節點
    def reConstructBinaryTree(self,pre,tin):
        if len(pre) == 0:
            return None
        root = TreeNode(pre[0])
        TinIndex = tin.index(pre[0])
        root.left = self.reConstructBinaryTree(pre[1:TinIndex+1],tin[0:TinIndex])
        root.right = self.reConstructBinaryTree(pre[TinIndex+1:],tin[TinIndex+1:])
        return root
    def PostTraversal(self,root):
        if root != None:
            self.PostTraversal(root.left)
            self.PostTraversal(root.right)
            print(root.val)

pre = ['A','C','D','E','F','H','G','B']
tin = ['D','E','C','A','H','F','B','G',]
S = Solution()
root = S.reConstructBinaryTree(pre,tin)
S.PostTraversal(root)