3

By independent nodes, I mean that the returned set can not contain nodes that are in immediate relations, parent and child cannot both be included. I tried to use Google, with no success. I don't think I have the right search words.

A link, any help would be very much appreciated. Just started on this now.

I need to return the actual set of independent nodes, not just the amount.

0

3 Answers 3

5

You can compute this recursive function with dynamic programming (memoization):

MaxSet(node) = 1 if "node" is a leaf
MaxSet(node) = Max(1 + Sum{ i=0..3: MaxSet(node.Grandchildren[i]) },  
                       Sum{ i=0..1: MaxSet(node.Children[i])      })

The idea is, you can pick a node or choose not to pick it. If you pick it, you can't pick its direct children but you can pick the maximum set from its grandchildren. If you don't pick it, you can pick maximum set from the direct children.

If you need the set itself, you just have to store how you selected "Max" for each node. It's similar to the LCS algorithm.

This algorithm is O(n). It works on trees in general, not just binary trees.

Sign up to request clarification or add additional context in comments.

13 Comments

This computes the size of the largest set, not the set itself.
I need to return the actual node's, not just max. I will edit my post.
Edited to compute the actual set.
This looks really nice, but this is really advanced. Sum and max I haven't seen before, and I don't directly see how I would store the value to retrieve the set?
i=0..3: MaxSet(node.Grandchildren[i]) i=0..1: MaxSet(node.Children[i]) Could you or someone explain this bit for me?
|
0

I would take-and-remove all leaves first while marking their parents as not-to-take, then remove all leaves that are marked until no such leaves are left, then recurse until the tree is empty. I don't have a proof that this always produces the largest possible set, but I believe it should.

2 Comments

Ah, you kinda go every other height level from the bottom towards the root? Not bad! I'll implement it and see.
The leaves do not need to be at the same level.
0

I've provided an answer to a question for the same problem, although the solution is in python, the explanation, algorithm, and test cases could be applicable.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.