Construct Binary Tree from Inorder and Postorder Traversal Time Limit Exceeded

I have a working solution but it is not efficient enough for the last test case. What can I change to make my solution more efficient?

I don't know if this is in the right place. Thanks.

Here's my completed code:

# 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)
    root = TreeNode.new(postorder.pop)
    while postorder.any?
        val = postorder.pop
        node = root unless 
        greater_than = nil
        less_than = nil
        loop do
            greater_than = inorder.index(val) > inorder.index(node.val)
            less_than = inorder.index(val) < inorder.index(node.val)
            
            break if (greater_than && node.right.nil?) ||
                     (less_than && node.left.nil?)
            
            if greater_than && node.right
                node = node.right
            elsif less_than && node.left
                node = node.left
            end
            
            
        end
        if greater_than
            node.right = TreeNode.new(val)
        elsif less_than
            node.left = TreeNode.new(val)
        end
    end
    root
end
Comments (0)