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


題目描述

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM