注意分割的边界:

从后序中取最后一个为根节点, 找该节点在中序中的位置.

中序中, 该位置左侧为左数, 右侧为右树, 均不包含该节点.

后序中, 最后一位已经确认, 分界点属于右树(left-right-root).


# Definition for a binary tree node.
# class TreeNode
#     attr_accessor :val, :left, :right
#     def initialize(val)
#         @val = val
#         @left, @right = nil, nil
#     end
# end

# @param {Integer[]} inorder
# @param {Integer[]} postorder
# @return {TreeNode}
def build_tree(inorder, postorder)
  post_i = postorder.last
  return nil if post_i.nil?
  
  node = TreeNode.new(post_i)
  i = inorder.index(post_i)
  
  node.left = build_tree(inorder[0...i], postorder[0...i])
  node.right = build_tree(inorder[i+1..-1], postorder[i...-1])
  
  node
end