/// <summary> /// 递归寻找方法 /// </summary> /// <param name="inputNode">输入的节点</param> /// <param name="inputValue">输入的值</param> /// <returns>找到的值若为Null则未找到</returns> private KDTreeNode searchRecursion(KDTreeNode inputNode, IDimensionValueBean inputValue) { if (null == inputNode) { return(null); } //若两节点相同 else if (UtilityMethod.IfDDimensionIsEqula (inputNode.ThisDataValue, inputValue, ifUseRecursionCheck)) { //若节点已删除 if (inputNode.IsDeleteTag) { return(null); } else { return(inputNode); } } else { //获取维度索引 int dimensionIndex = inputNode.NowDimisionIndex; //获取多维数据封装 IDimensionValueBean nodeValue = inputNode.ThisDataValue; //获得当前节点维度的值 double tempDimensionValue = nodeValue.GetValueAtDimensionIndex(dimensionIndex); //获得输入数值在节点维度的值 double tempInputValue = inputValue.GetValueAtDimensionIndex(dimensionIndex); //比较两值 CompareResultEnum compareResult = UtilityMethod.CompareDoulbe(tempInputValue, tempDimensionValue); //比较结果调整 compareResult = equalStrategy(compareResult); //次轮迭代使用的节点 KDTreeNode nextRoundNode = null; //若小于去左节点 if (compareResult == CompareResultEnum.Less) { nextRoundNode = inputNode.LeftChild; } //其它去右节点 else { nextRoundNode = inputNode.RightChild; } //递归执行 return(searchRecursion(nextRoundNode, inputValue)); } }
/// <summary> /// 相等策略调整 /// </summary> /// <param name="inputResult">输入的比较结果</param> /// <returns>调整后的结果</returns> private CompareResultEnum equalStrategy(CompareResultEnum inputResult) { if (CompareResultEnum.Equal != inputResult) { return(inputResult); } //相等视为小于 if (true == ifValueEqualAsLess) { return(CompareResultEnum.Less); } //相等视为大于 else { return(CompareResultEnum.Large); } }
/// <summary> /// /// </summary> /// <param name="isNormal"></param> public CompareResult(CompareResultEnum cre) { this.CompareResultEnum = cre; }