1. 程式人生 > >重建二叉樹(python)

重建二叉樹(python)

原始碼

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{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