1. 程式人生 > >劍指offer——python【第4題】重建二叉樹

劍指offer——python【第4題】重建二叉樹

代碼 subject 序列 eno 描述 color index urn describe

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。

解題思路

用遞歸思想

前序遍歷是{1,2,4,7,3,5,6,8},中序遍歷是{4,7,2,1,5,3,8,6},可以知道1是根節點,則在中序遍歷中,4,7,2都是1的左子樹,5,3,8,6都是1的右子樹;從前序遍歷又可以知道2是1的左子節點,是1的左子樹中“根節點”的存在;3是1的右子節點,是1的右子樹中“根節點”的存在;因而可以不斷遞歸,直至明確每個節點的位置

給出代碼:

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        
        if len(pre) == 0:            
            
return None if len(pre) == 1: return TreeNode(pre[0]) else: res = TreeNode(pre[0]) res.left = self.reConstructBinaryTree(pre[1: tin.index(pre[0]) + 1], tin[: tin.index(pre[0])]) res.right
= self.reConstructBinaryTree(pre[tin.index(pre[0]) + 1: ], tin[tin.index(pre[0]) + 1: ]) return res

劍指offer——python【第4題】重建二叉樹