Beispiel #1
0
        /// <summary>
        /// 添加节点
        /// </summary>
        /// <param name="data"></param>
        /// <param name="parentNode"></param>
        /// <exception cref="Exception"></exception>
        public PTreeNode <T> AddNode(T data, PTreeNode <T> parentNode)
        {
            // 超出容量
            if (Count > _treeSize)
            {
                return(null);
            }

            var parentIndex = this.GetNodeIndex(parentNode);

            if (parentIndex == -1)
            {
                throw new Exception("无效的父节点");
            }

            PTreeNode <T> result = null;

            for (int i = 0; i < _treeSize; i++)
            {
                if (_datas[i] == null)
                {
                    result    = new PTreeNode <T>(data, parentIndex);
                    _datas[i] = result;
                    Count++;
                    break;
                }
            }

            return(result);
        }
Beispiel #2
0
 public PTree(T rootData, int treeSize)
 {
     _treeSize = treeSize;
     _datas    = new PTreeNode <T> [_treeSize];
     _datas[0] = new PTreeNode <T>(rootData, -1);
     Count++;
 }
Beispiel #3
0
        /// <summary>
        /// 获取指定节点的子节点列表
        /// </summary>
        /// <param name="parentNode"></param>
        /// <returns></returns>
        public List <PTreeNode <T> > GetChilds(PTreeNode <T> parentNode = null)
        {
            var list = new List <PTreeNode <T> >();

            var parentIndex = GetNodeIndex(parentNode);

            for (int i = 0; i < _treeSize; i++)
            {
                var currentNode = _datas[i];
                if (currentNode == null)
                {
                    continue;
                }

                if (parentNode == null)
                {
                    list.Add(currentNode);
                }
                else
                {
                    if (currentNode.ParentIndex == parentIndex)
                    {
                        list.Add(currentNode);
                    }
                }
            }

            return(list);
        }
Beispiel #4
0
        /// <summary>
        /// 获取指定节点的父节点
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public PTreeNode <T> GetParent(PTreeNode <T> node)
        {
            if (node == null)
            {
                return(null);
            }

            return(_datas[node.ParentIndex]);
        }
Beispiel #5
0
        /// <summary>
        /// 获取指定节点的Index
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public int GetNodeIndex(PTreeNode <T> node)
        {
            for (int i = 0; i < _treeSize; i++)
            {
                if (_datas[i].Equals(node))
                {
                    return(i);
                }
            }

            return(-1);
        }