/// <summary> /// 定位路径字符串,/name/name 这种风格 /// 算法还需优化 /// </summary> /// <param name="pathStr"></param> /// <returns></returns> public BaseLeaf <TKey> LocationPath(string pathStr) { var pathArray = pathStr.Split('/'); BaseLeaf <TKey> thisNode = this.TreeRoot; if (pathArray.Any()) { for (var i = 0; i < pathArray.Length; i++) { if (i == 0 && pathArray[i].NullEmpty()) { continue; } if (pathArray[i].NotNullEmpty() && thisNode.NotNull()) { var nname = pathArray[i]; thisNode = FindNodeByName(nname, thisNode); if (thisNode.IsNull()) { break; } } } } return(thisNode); }
private void ParentNode(BaseLeaf <TKey> currNode, List <BaseNode <TKey> > parents) { if (currNode.NotNull()) { if (currNode.Parent.NotNull()) { ParentNode(currNode.Parent, parents); } // 检查一下找到的是节点还是叶子,叶子不应该被加入父级层级组内 if (currNode is BaseNode <TKey> ) { parents.Add(currNode as BaseNode <TKey>); } } }