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