package com.interview.tree;
/**
* http://www.geeksforgeeks.org/largest-independent-set-problem/
*/
public class LargestIndependentSetInTree {
public int largestSet(Node root){
if(root == null){
return 0;
}
if(root.lis != -1){
return root.lis;
}
int excl = 0;
int left_excl = 0;
if(root.left != null){
left_excl = largestSet(root.left.left) + largestSet(root.left.right);
excl += largestSet(root.left);
}
int right_excl = 0;
if(root.right != null){
right_excl = largestSet(root.right.left) + largestSet(root.right.right);
excl += largestSet(root.right);
}
int incl = left_excl + right_excl + root.data;
root.lis = incl;
return incl > excl ? incl : excl;
}
public static void main(String args[]){
int inorder[] = {4,13,1,7,6,3,19};
int preorder[] = {13,4,6,7,1,3,19};
ConstructTreeFromInOrderPreOrder ctf = new ConstructTreeFromInOrderPreOrder();
Node root = ctf.createTree(inorder, preorder);
LargestIndependentSetInTree lis = new LargestIndependentSetInTree();
System.out.println(lis.largestSet(root));
}
}