Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        //----------------遍历节点结束
        //----------------清空节点

        /**
         * 清空当前二叉树所有节点,并通过TreeListNotifier事件类型抛出类型为TreeListNotifier.CHANGE的事件。
         * @return 清空成功则返回true,否则返回false或因操作不慎导致的异常。
         */
        public bool clear()
        {
            _length = 0;
            _root   = null;
            dispatchEvent(new SATreeListEvent(SATreeList.CHANGE));
            return(true); //traverse(clearNode);
        }
Esempio n. 3
0
 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);
     }
 }
Esempio n. 4
0
 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);
     }
 }
Esempio n. 5
0
        /**
         * 添加一个节点到该二叉树内,并通过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);
        }
Esempio n. 6
0
        //----------------添加节点结束
        //----------------移除对象名节点
        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);
            }
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        //------------------获取节点

        /**
         * 获取一个节点从该二叉树内。
         * @param elementName 要获取的节点名称。
         * @return 获取成功则返回当前获取对象实例,否则返回null。
         */
        public ISAElement getElement(string elementName)
        {//添加一个工人对象
            ISATreeElement treeElement = getTreeElement(elementName);

            return(treeElement != null?treeElement.getElement() : null);
        }
Esempio n. 9
0
        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;
            }
            }
        }
Esempio n. 10
0
 /**
  * 构造函数
  */
 public SATreeList()
 {
     _root   = null;
     _length = 0;
 }
Esempio n. 11
0
 public void setRight(ISATreeElement value)
 {
     _right = value;
 }
Esempio n. 12
0
 public void setLeft(ISATreeElement value)
 {
     _left = value;
 }
Esempio n. 13
0
 public void setRoot(ISATreeElement value)
 {
     _root = value;
 }