1. 程式人生 > >劍指Offer4:重建二叉樹

劍指Offer4:重建二叉樹

思路:

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

好難呀,實在不行