//For dummy node only public KDTreeNode(int dim, KDTreeNode child) { isLeaf = false; leftChild = child; splitDim = 0; point = new Point(dim, 1000); }
public KDTreeNode(PointSet ps, KDTreeNode parent, DimWeight dwsplit, bool useRandom) { this.parent = parent; if (ps.Points.Count() > 1) { isLeaf = false; if (useRandom) { splitDim = dwsplit.getRandomDim(); } else { splitDim = ps.GetLongestDimension(dwsplit); } var pss = ps.PartitionMedian(splitDim); point = pss.median; leftChild = new KDTreeNode(pss.lower, this, dwsplit, useRandom); rightChild = new KDTreeNode(pss.upper, this, dwsplit, useRandom); } else if (ps.Points.Count() == 1) { isLeaf = true; point = ps.Points[0]; } else { isLeaf = true; } }
public KDTree(PointSet ps, DimWeight dw, bool useRandom) { splitWeight = dw; root = new KDTreeNode(ps, null, splitWeight, useRandom); root.parent = new KDTreeNode(ps.NumDim, root); root = root.parent; }