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’m aware of 2 such projects, are there others?
git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
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
Hi everyone.
My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
Hello folks!
So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
How Can I Optimise Compile Time Dependencies
I have been building an elixir application for about 2 years now. Many modules and files ha...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
Other Trending Topics
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with.
But I don’t use it anymore.
Serverless was the promis...
New
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
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
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #performance











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)