private double calcNodeLevel(TreeNode node) { return (double) node.getLevel() / (double) maxLevel; }
/** * This method returns the last common ancestor of two nodes of a tree. * <p> * This eventually returns null if one of the given nodes is null or the given nodes * are not in this tree. * * @param nodeA * @param nodeB * @return the LCA of nodeA and nodeB or null if no LCA exists */ public TreeNode findLeastCommonAncestor(TreeNode nodeA, TreeNode nodeB) { if (nodeA == null || nodeB == null) return null; if (nodeA.getGraph() != this || nodeB.getGraph() != this) return null; /* set nodeA and nodeB to equal level */ if (nodeA.getLevel() < nodeB.getLevel()) { while (nodeA.getLevel() != nodeB.getLevel()) { nodeB = (TreeNode) nodeB.getParent(); } } else { while (nodeA.getLevel() != nodeB.getLevel()) { nodeA = (TreeNode) nodeA.getParent(); } } /* set both nodes to their parent, until they are equal */ while (nodeA != nodeB) { nodeA = (TreeNode) nodeA.getParent(); nodeB = (TreeNode) nodeB.getParent(); } return (nodeA); }
int ab1, bc1, ac1; if (useLcaMap) { ab1 = lca1[i][k].getLevel(); bc1 = lca1[k][j].getLevel(); ac1 = lca1[i][j].getLevel(); } else { ab1 = tree1.findLeastCommonAncestor(first, second).getLevel(); bc1 = tree1.findLeastCommonAncestor(second, third).getLevel(); ac1 = tree1.findLeastCommonAncestor(first, third).getLevel(); final Integer index_second = indices.get(second2); final Integer index_third = indices.get(third2); ab2 = lca2[index_first][index_second].getLevel(); bc2 = lca2[index_second][index_third].getLevel(); ac2 = lca2[index_first][index_third].getLevel(); } else { ab2 = tree2.findLeastCommonAncestor(first2, second2).getLevel(); bc2 = tree2.findLeastCommonAncestor(second2, third2).getLevel(); ac2 = tree2.findLeastCommonAncestor(first2, third2).getLevel();
int ab1, bc1, ac1; if (useLcaMap) { ab1 = lca1[i][k].getLevel(); bc1 = lca1[k][j].getLevel(); ac1 = lca1[i][j].getLevel(); } else { ab1 = tree1.findLeastCommonAncestor(first, second).getLevel(); bc1 = tree1.findLeastCommonAncestor(second, third).getLevel(); ac1 = tree1.findLeastCommonAncestor(first, third).getLevel(); final Integer index_second = indices.get(second2); final Integer index_third = indices.get(third2); ab2 = lca2[index_first][index_second].getLevel(); bc2 = lca2[index_second][index_third].getLevel(); ac2 = lca2[index_first][index_third].getLevel(); } else { ab2 = tree2.findLeastCommonAncestor(first2, second2).getLevel(); bc2 = tree2.findLeastCommonAncestor(second2, third2).getLevel(); ac2 = tree2.findLeastCommonAncestor(first2, third2).getLevel();
int ab1, bc1, ac1; if (useLcaMap) { ab1 = lca1[i][k].getLevel(); bc1 = lca1[k][j].getLevel(); ac1 = lca1[i][j].getLevel(); } else { ab1 = tree1.findLeastCommonAncestor(first, second).getLevel(); bc1 = tree1.findLeastCommonAncestor(second, third).getLevel(); ac1 = tree1.findLeastCommonAncestor(first, third).getLevel(); final Integer index_second = indices.get(second2); final Integer index_third = indices.get(third2); ab2 = lca2[index_first][index_second].getLevel(); bc2 = lca2[index_second][index_third].getLevel(); ac2 = lca2[index_first][index_third].getLevel(); } else { ab2 = tree2.findLeastCommonAncestor(first2, second2).getLevel(); bc2 = tree2.findLeastCommonAncestor(second2, third2).getLevel(); ac2 = tree2.findLeastCommonAncestor(first2, third2).getLevel();
int ab1, bc1, ac1; if (useLcaMap) { ab1 = lca1[i][k].getLevel(); bc1 = lca1[k][j].getLevel(); ac1 = lca1[i][j].getLevel(); } else { ab1 = tree1.findLeastCommonAncestor(first, second).getLevel(); bc1 = tree1.findLeastCommonAncestor(second, third).getLevel(); ac1 = tree1.findLeastCommonAncestor(first, third).getLevel(); final Integer index_second = indices.get(second2); final Integer index_third = indices.get(third2); ab2 = lca2[index_first][index_second].getLevel(); bc2 = lca2[index_second][index_third].getLevel(); ac2 = lca2[index_first][index_third].getLevel(); } else { ab2 = tree2.findLeastCommonAncestor(first2, second2).getLevel(); bc2 = tree2.findLeastCommonAncestor(second2, third2).getLevel(); ac2 = tree2.findLeastCommonAncestor(first2, third2).getLevel();
int level = node.getLevel(); if (level > maxLevel) maxLevel = level;
if (Thread.interrupted()) return -1; TreeNode third = leaves1[j]; int ab1 = tree1.findLeastCommonAncestor(first, second).getLevel(); int bc1 = tree1.findLeastCommonAncestor(second, third).getLevel(); int ac1 = tree1.findLeastCommonAncestor(first, third).getLevel(); int ab2 = tree2.findLeastCommonAncestor(first2, second2).getLevel(); int bc2 = tree2.findLeastCommonAncestor(second2, third2).getLevel(); int ac2 = tree2.findLeastCommonAncestor(first2, third2).getLevel();