已知先序遍歷和中序遍歷,輸出後序遍歷
阿新 • • 發佈:2018-12-31
已知先序遍歷和中序遍歷,輸出後序遍歷
題目描述
對於一棵二叉樹,已知先序遍歷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)