chandan374
I am new to elixer, I need some help to construct binary tree from list of element(given in level order). Due to immutability i’m facing difficutly to implement this.
For ex: [1, 2, 3, -1, -1, -1, -1] will be represented as:
1
/ \
2 3
Here -1 means, node will be null.
Expected Output Format:
TreeNode{
data: 1,
left: TreeNode{
data: 2,
left: nil,
right: nil
},
right: TreeNode{
data: 3,
left: nil,
right: nil
}
}
In ruby, we can implement in this way.
def input_tree(input)
val = input[0]
input.shift()
root = TreeNode.new(val)
queue = []
queue.push(root)
while queue.size > 0
current_node = queue[0]
queue.shift()
leftValue = input[0]
input.shift()
rightValue = input[0]
input.shift()
if leftValue != -1
leftNode = TreeNode.new(leftValue)
current_node.left = leftNode
queue.push(leftNode)
end
if rightValue != -1
rightNode = TreeNode.new(rightValue)
current_node.right = rightNode
queue.push(rightNode)
end
end
return root
end
TIA ![]()
Trending in Questions
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
Documentation
While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
Hello,
I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind.
However, when I launch mix phx.server, I get an error...
New
Hi everyone,
I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding.
I sta...
New
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
I’m working on a small exercise involving update_in/3, and I came up with this solution:
data = %{
name: "Periodic Table",
category:...
New
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication):
toke...
New
Other Trending Topics
Edit: 2026 May 15 - This post is archived.
Mob is alive!!
Main docs: mob v0.7.11 — Documentation
A bit of explanation for the slightly c...
New
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
A little off-topic, but I feel like people here have a good head on their shoulders.
I used to be quite good at making software. Was luc...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ai
- #ecto-query
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #metaprogramming
- #hex











Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
cevado
have you tried using gb_trees from erlang?
adamu
https://stackoverflow.com/questions/73528430/build-binary-tree-from-level-order-array
benwilson512
Hi @chandan374 can you show what you’ve tried so far?
Eiji
With above writing code is really simple:
chandan374
Hi @Eiji , thanks for the help.
Sorry i didn’t provided complete context in question. Above approach will work only if given input is for complete tree.
Please check 1st answer of: https://stackoverflow.com/questions/37941318/how-to-build-an-incomplete-binary-tree-from-array-representation
ex:
For the input: [5,4,8,11,-1,17,4,7,-1,-1,-1,5, -1, -1, -1, -1]
Actual tree representation:
chandan374
Have implemented one basic solution.
, its my 2nd day with elixir.
Please ingore code quality
Approach: Provided unique id to each node, created a map that will map parent_node_id => (left_child_id, right_child_id). Once map is created, Recursively calling on root_id to build the tree.
Code:
Is there any better approach i can use?
lucaong
Actually, @Eiji’s approach will work also for incomplete trees, as long as the missing nodes are marked with
-1, like in your example[5,4,8,11,-1,17,4,7,-1,-1,-1,5, -1, -1, -1, -1]:Eiji
The tree representation you provided is incorrect as
5leaf should be aleftchild of17node. Therefore I think my example is working.This is how it should look:
To prove that I have also wrote another solution. This time my code is building the tree in reverse mode (I’m starting with leafs) based on pattern matching.
Both examples returns exactly same data. Feel free to ask if you have any questions.
al2o3cr
Here’s an approach that uses a pair of recursive functions:
Some notes on the implementation:
build_nodesis tolerant of any number of trailing -1s.chunk_everyis used to tidily handle cases wherebuild_nodesreturns an odd number of nodes by providing anilforleftovers@Eiji I believe the error in your diagram is the two
-1s under the-1that’s a right-child of4.-1s on a given level shouldn’t consume any input values in the next level.Eiji
Weird … it’s like save the space no matter what (here I mean confusion of people new in topic). It’s my first time using it and such assumption looks really bad at this part. Anyway, in that case my first code would not work as there’s no algorithm which can dynamically count the proper
indexwithout so much context.However my second example is really easy to modify. Here goes an updated version which handles both use cases depends on
custom_countoption:I changed only 2 things here:
countbefore passing tosplit/4call-1entries (casestatement)