Skip to content

Instantly share code, notes, and snippets.

@jubishop
Created July 10, 2019 21:56
Show Gist options
  • Save jubishop/1c67cdcf189e49355d4c4aa0e32ac400 to your computer and use it in GitHub Desktop.
Save jubishop/1c67cdcf189e49355d4c4aa0e32ac400 to your computer and use it in GitHub Desktop.
# @param {Integer} n
# @return {TreeNode[]}
def generate_trees(n, vals = (1..n).to_a)
return [] if vals.empty?
return [TreeNode.new(vals.first)] if (vals.length == 1)
nodes = Array.new
all_rights = generate_trees(n, vals[1...vals.length])
all_rights.each { |right|
node = TreeNode.new(vals.first)
node.right = right
nodes.push(node)
}
all_lefts = generate_trees(n, vals[0...vals.length-1])
all_lefts.each { |left|
node = TreeNode.new(vals.last)
node.left = left
nodes.push(node)
}
1.upto(vals.length-2) { |index|
lefts = generate_trees(n, vals[0...index])
rights = generate_trees(n, vals[index+1...vals.length])
lefts.each { |left|
rights.each { |right|
node = TreeNode.new(vals[index])
node.left = left
node.right = right
nodes.push(node)
}
}
}
return nodes
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment