private bool removeNode(ISATreeElement treeElement) { if (treeElement.getRoot() != null) { if (treeElement.getLeft() != null) { if (treeElement.getRoot().getLeft() != null && treeElement.getRoot().getLeft() == treeElement) { treeElement.getRoot().setLeft(treeElement.getLeft()); } else { treeElement.getRoot().setRight(treeElement.getLeft()); } if (treeElement.getRight() != null) { addNode(_root, treeElement.getRight()); } treeElement.getLeft().setRoot(treeElement.getRoot()); } else if (treeElement.getRight() != null) { if (treeElement.getRoot().getLeft() != null && treeElement.getRoot().getLeft() == treeElement) { treeElement.getRoot().setLeft(treeElement.getRight()); } else { treeElement.getRoot().setRight(treeElement.getRight()); } treeElement.getRight().setRoot(treeElement.getRoot()); } else { clearNode(treeElement); } } else { if (treeElement.getLeft() != null) { _root = treeElement.getLeft(); treeElement.getLeft().setRoot(null); if (treeElement.getRight() != null) { addNode(_root, treeElement.getRight()); } } else if (treeElement.getRight() != null) { _root = treeElement.getRight(); treeElement.getRight().setRoot(null); } else { _root = null; } } return(false); }
//----------------遍历节点结束 //----------------清空节点 /** * 清空当前二叉树所有节点,并通过TreeListNotifier事件类型抛出类型为TreeListNotifier.CHANGE的事件。 * @return 清空成功则返回true,否则返回false或因操作不慎导致的异常。 */ public bool clear() { _length = 0; _root = null; dispatchEvent(new SATreeListEvent(SATreeList.CHANGE)); return(true); //traverse(clearNode); }
private void inOrder(ISATreeElement treeElementRoot, Object target, MethodInfo methodInfo) { if (treeElementRoot != null) { inOrder(treeElementRoot.getLeft(), target, methodInfo); methodInfo.Invoke(target, new Object[] { treeElementRoot.getElement() }); inOrder(treeElementRoot.getRight(), target, methodInfo); } }
private void clearNode(ISATreeElement treeElementRoot) { if (treeElementRoot.getRoot() == null) { _root = null; } else if (treeElementRoot.getRoot() != null && treeElementRoot.getRoot().getLeft() == treeElementRoot) { treeElementRoot.getRoot().setLeft(null); } else { treeElementRoot.getRoot().setRight(null); } }
/** * 添加一个节点到该二叉树内,并通过TreeListNotifier事件类型抛出类型为TreeListNotifier.CHANGE的事件。 * @param element 实现ISAElement接口的实例对象。 * @return 返回当前添加状态,true表示成功 ,false则失败。 */ public bool addElement(ISAElement element) {//添加一个工人对象 SATreeElement treeElement = new SATreeElement(element); if (_root == null) { _root = treeElement; _length++; dispatchEvent(new SATreeListEvent(SATreeList.CHANGE)); return(true); } addNode(_root, treeElement);//添加节点 _length++; dispatchEvent(new SATreeListEvent(SATreeList.CHANGE)); return(true); }
//----------------添加节点结束 //----------------移除对象名节点 private ISATreeElement removeTreeElement(string elementName) {//删除一个工人对象 if (_root == null) { return(null); } ISATreeElement treeElement = getTreeElement(elementName);//要删除的节点 if (treeElement != null) { removeNode(treeElement); _length--; dispatchEvent(new SATreeListEvent(SATreeList.CHANGE)); return(treeElement); } else { return(null); } }
private ISATreeElement getNode(ISATreeElement treeElementRoot, string elementName) { ISATreeElement treeElement = null; switch (toDirection(treeElementRoot.getName(), elementName)) { case -1: { if (treeElementRoot.getLeft() != null) { treeElement = getNode(treeElementRoot.getLeft(), elementName); } else { //未在左子节点中找到该对象 } break; } case 1: { if (treeElementRoot.getRight() != null) { treeElement = getNode(treeElementRoot.getRight(), elementName); } else { //未在右子节点中找到该对象 } break; } case 0: { treeElement = treeElementRoot; break; } } return(treeElement); }
//------------------获取节点 /** * 获取一个节点从该二叉树内。 * @param elementName 要获取的节点名称。 * @return 获取成功则返回当前获取对象实例,否则返回null。 */ public ISAElement getElement(string elementName) {//添加一个工人对象 ISATreeElement treeElement = getTreeElement(elementName); return(treeElement != null?treeElement.getElement() : null); }
private void addNode(ISATreeElement treeElementRoot, ISATreeElement treeElement) { switch (toDirection(treeElementRoot.getName(), treeElement.getName())) { case -1: { //左子节点查询 if (treeElementRoot.getLeft() != null) { addNode(treeElementRoot.getLeft(), treeElement); } else { treeElementRoot.setLeft(treeElement); treeElement.setRoot(treeElementRoot); } break; } case 1: { //右子节点查询 if (treeElementRoot.getRight() != null) { addNode(treeElementRoot.getRight(), treeElement); } else { treeElementRoot.setRight(treeElement); treeElement.setRoot(treeElementRoot); } break; } case 0: { //相同 if (treeElementRoot.getLeft() != null) { treeElementRoot.getLeft().setRoot(treeElement); treeElement.setLeft(treeElementRoot.getLeft()); } if (treeElementRoot.getRight() != null) { treeElementRoot.getRight().setRoot(treeElement); treeElement.setRight(treeElementRoot.getRight()); } if (treeElementRoot.getRoot() != null && treeElementRoot.getRoot().getLeft() != null && treeElementRoot.getRoot().getLeft() == treeElementRoot) { treeElementRoot.getRoot().setLeft(treeElement); } else if (treeElementRoot.getRoot() != null && treeElementRoot.getRoot().getRight() != null && treeElementRoot.getRoot().getRight() == treeElementRoot) { treeElementRoot.getRoot().setRight(treeElement); } else { // trace(treeElement.getName()); // trace(treeElementRoot.getRoot().getLeft().getName()); // trace(treeElementRoot.getRoot().getRight().getName()); } treeElement.setRoot(treeElementRoot.getRoot()); //....游离被替换资源数据 break; } } }
/** * 构造函数 */ public SATreeList() { _root = null; _length = 0; }
public void setRight(ISATreeElement value) { _right = value; }
public void setLeft(ISATreeElement value) { _left = value; }
public void setRoot(ISATreeElement value) { _root = value; }