劍指Offer4:重建二叉樹
阿新 • • 發佈:2018-11-27
思路:
1.從前序序列pre中可以知道第一個元素為根節點,即flag = TreeNode(pre[0])。
2.再者取出第一個元素值在中序序列中的下標index = tin.index(pre[0])這個可以取出前序序列和中序序列該根節點下的左子樹,然後再把左子樹根節點找到,繼續劃分,直到該根節點沒有左子樹為止。
3.然後取出該根節點的右子樹,然後繼續找根節點和左子樹以及右子樹,若全部結束,退到上個根節點。繼續1和2步驟
# -*- 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 if len(pre) == 0: return None if len(pre) == 1: return TreeNode(pre[0]) else: flag = TreeNode(pre[0]) index = tin.index(pre[0]) flag.left = self.reConstructBinaryTree(pre[1:index+1],tin[:index]) flag.right = self.reConstructBinaryTree(pre[index+1:],tin[index+1:]) return flag
好難呀,實在不行