Пример #1
0
        /// <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);
        }
Пример #2
0
 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>);
         }
     }
 }