// pre kazdeho predchodcu n updatne pocet listov, // ktore su nad nim public void updateNumLeafsUp(KDNode n) { n.setNumLeafs(n.getLeft().getNumLeafs() + n.getRight().getNumLeafs()); Console.WriteLine("update to root " + n.getSplit() + " numLeafs = " + n.getNumLeafs()); Console.WriteLine("update to root right " + n.getRight().getNumLeafs() + " left " + n.getLeft().getNumLeafs()); if (n.Equals(root)) { return; } updateNumLeafsUp(n.getParent()); }
// pre kazdy vrchol podstromu n updatne pocet listov, // ktore su pod nim public int updateNumLeafsDown(KDNode n) { if (n.isLeaf) { n.setNumLeafs(1); Console.WriteLine("update " + n.getPoint() + " numLeafs = 1"); return 1; } int r = updateNumLeafsDown(n.getRight()); int l = updateNumLeafsDown(n.getLeft()); n.setNumLeafs(r + l); Console.WriteLine("update " + n.getSplit() + " numLeafs = " + n.getNumLeafs()); return r + l; }