重建二叉樹(python)
阿新 • • 發佈:2018-12-09
題目描述
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。
# -*- coding:utf-8 -*- class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: # 返回構造的TreeNode根節點 # 根據前序遍歷和中序遍歷重建二叉樹 def reConstructBinaryTree(self, pre, tin): # write code here # 遇到樹的問題優先考慮使用遞迴 # pre為前序遍歷,tin為中序遍歷 if not pre or not tin: return None # 前序遍歷的第一個值為根節點 root = TreeNode(pre[0]) # 在中序遍歷中找到根節點,也是中心位置 val = tin.index(pre[0]) # 遞迴呼叫函式,遍歷兩個序列 # 原樹的左子樹:前序遍歷(從根節點一直到中心點),中序遍歷(從開頭一直到中心位置) root.left = self.reConstructBinaryTree(pre[1:val + 1], tin[:val]) # 原樹的右子樹:前序遍歷(從中心點後一直到葉子節點),中序遍歷(同前序) root.right = self.reConstructBinaryTree(pre[val + 1:], tin[val + 1:]) return root