/// <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); }
public PTree(T rootData, int treeSize) { _treeSize = treeSize; _datas = new PTreeNode <T> [_treeSize]; _datas[0] = new PTreeNode <T>(rootData, -1); Count++; }
/// <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); }
/// <summary> /// 获取指定节点的父节点 /// </summary> /// <param name="node"></param> /// <returns></returns> public PTreeNode <T> GetParent(PTreeNode <T> node) { if (node == null) { return(null); } return(_datas[node.ParentIndex]); }
/// <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); }