Exemple #1
0
 public LJTreeNode(ITreeNode value, LJTreeNode par, LJTreeNode left, LJTreeNode right)
 {
     this.data   = value;
     this.parent = par;
     this.left   = left;
     this.right  = right;
 }
Exemple #2
0
        public LJTreeNode GetTreeNode(ITreeNode item, LJTreeNode pptr,
                                      LJTreeNode lptr, LJTreeNode rptr)
        {
            LJTreeNode p = new LJTreeNode(item, pptr, lptr, rptr);

            return(p);
        }
Exemple #3
0
 public void ClearList()
 {
     DeleteTree(root);
     root    = null;
     current = null;
     size    = 0;
 }
Exemple #4
0
        public LJTreeNode FindNode(ITreeNode item, LJTreeNode parent)
        {
            LJTreeNode t = parent;

            if (parent == null)
            {
                t = root;
            }
            while (t != null)
            {
                int comp = item.CompareTo(t.data);
                if (comp == 0)
                {
                    break;
                }
                else
                {
                    if (item.IsChildOf(t.data))
                    {
                        t = t.Left;
                    }
                    else if (comp > 0)
                    {
                        t = t.Right;
                    }
                    else
                    {
                        t = null;
                    }
                }
            }
            return(t);
        }
Exemple #5
0
 private void DeleteTree(LJTreeNode t)
 {
     if (t != null)
     {
         DeleteTree(t.Left);
         DeleteTree(t.Right);
         FreeTreeNode(t);
         size--;
     }
 }
Exemple #6
0
        public LJTreeNode Insert(ITreeNode item)
        {
            LJTreeNode t       = root;
            LJTreeNode parent  = null;
            LJTreeNode right   = null;
            LJTreeNode newNode = null;

            //用<表示兄,用>表示弟,用^表示孩子
            // terminate on on empty subtree
            while (t != null)
            {
                parent = t;
                if (item.IsChildOf(t.data))
                {
                    parent = t;
                    right  = null;
                    t      = t.Left;
                }
                else if (item.CompareTo(t.data) < 0)
                {
                    parent = t.Parent;
                    right  = t;
                    break;
                }
                else
                {
                    parent = t;
                    right  = null;
                    t      = t.Right;
                }
            }
            newNode = GetTreeNode(item, parent, null, right);
            if (parent == null)
            {
                root = newNode;
            }
            else if (item.IsChildOf(parent.data))
            {
                parent.Left = newNode;
            }
            else
            {
                parent.Right = newNode;
            }
            if (right != null)
            {
                right.Parent = newNode;
            }
            current = newNode;
            size++;
            return(newNode);
        }
Exemple #7
0
        public LJTreeNode GetPrevSib(LJTreeNode node)
        {
            LJTreeNode pptr = node.Parent;

            if (pptr != null)
            {
                if (node.data.IsChildOf(pptr.data))
                {
                    return(null);
                }
            }
            return(pptr);
        }
Exemple #8
0
        public LJTreeNode GetParent(LJTreeNode node)
        {
            LJTreeNode pptr = node.Parent;

            while (pptr != null)
            {
                if (node.data.IsChildOf(pptr.data))
                {
                    break;
                }
                pptr = pptr.Parent;
            }
            return(pptr);
        }
Exemple #9
0
        public int Find(ref ITreeNode item)
        {
            LJTreeNode parent = null;

            current = FindNode(item, parent);
            if (current != null)
            {
                item = current.data;
                return(1);
            }
            else
            {
                return(0);
            }
        }
Exemple #10
0
 private void FreeTreeNode(LJTreeNode p)
 {
     p.Dispose();
 }
Exemple #11
0
 public LJTreeNode GetChild(LJTreeNode node)
 {
     return(node.Left);
 }
Exemple #12
0
 public LJTreeNode GetNextSib(LJTreeNode node)
 {
     return(node.Right);
 }