Java Algorithm for finding the largest set of independent nodes in a binary tree

前端 未结 3 442
小蘑菇
小蘑菇 2021-01-14 10:13

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, wi

相关标签:
3条回答
  • 2021-01-14 10:45

    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.

    0 讨论(0)
  • 2021-01-14 10:58

    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.

    0 讨论(0)
  • 2021-01-14 11:03

    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.

    0 讨论(0)
提交回复
热议问题