예제 #1
0
 ///<summary>Создать дерево с указанным корнем.</summary>
 public LinkedTree(LinkedNode <T> n)
 {
     n.Parent = null;
     _r       = n;
     _visitor = new NRVisitor <T>();
     _count   = 0;
     __ComputeC(ref _count);
 }
예제 #2
0
        ///<summary>Добавить новый узел с содержимым item
        ///к указанному узлу дерева.
        ///</summary>
        public void AddTo(Node <T> n, T item)
        {
            LinkedNode <T> p  = n as LinkedNode <T>;
            LinkedNode <T> it = new LinkedNode <T>();

            it.Value  = item;
            it.Parent = p;
            _count   += 1;
            p.Children.Add(it);
        }
예제 #3
0
        ///<summary>Добавить новый узел с содержимым item
        ///к самому левому листу дерева.
        ///</summary>
        public void Add(T item)
        {
            LinkedNode <T> n = _r;

            while (n.Children.Count != 0)
            {
                n = n.Children[0];//LEFTMOST_CHILD
            }
            AddTo(n, item);
        }
예제 #4
0
        ///<summary>Первый сын узла (LinkedNode<typeparamref name="T"/>)</summary>
        public Node <T> LeftMostChild(Node <T> node)
        {
            LinkedNode <T> np = node as LinkedNode <T>;

            if (np == null || np.Children == null || np.Children.Count == 0)
            {
                return(null);
            }
            return(np.Children[0]);
        }
예제 #5
0
        ///<summary>Родитель узла. (LinkedNode<typeparamref name="T"/>)</summary>
        public Node <T> Parent(Node <T> node)
        {
            LinkedNode <T> np = node as LinkedNode <T>;

            if (np == null || np.Parent == null)
            {
                return(null);
            }
            return(np.Parent);
        }
예제 #6
0
        ///<summary>Получить последнего сына указанного узла.</summary>
        public Node <T> RightMostChild(Node <T> n)
        {
            LinkedNode <T> c = n as LinkedNode <T>;

            if (c == null || c.Children.Count == 0)
            {
                return(null);
            }
            return(c.Children[c.Children.Count - 1]);
        }
예제 #7
0
        ///<summary>Получить список детей указанного узла.</summary>
        public IList <Node <T> > GetChildren(Node <T> n)
        {
            LinkedNode <T>   c = n as LinkedNode <T>;
            List <Node <T> > l = new List <Node <T> >();

            for (Int32 i = 0; i < c.Children.Count; i++)
            {
                l.Add(c.Children[i]);
            }
            return(l);
        }
예제 #8
0
        ///<summary>Правый брат узла (LinkedNode<typeparamref name="T"/>)</summary>
        public Node <T> RightSibling(Node <T> node)
        {
            LinkedNode <T> np = node as LinkedNode <T>;

            if (np == null || np.Parent == null)
            {
                return(null);
            }
            LinkedNode <T>         parent = np.Parent;
            List <LinkedNode <T> > c      = parent.Children;
            Int32 i = 0;

            while (!c[i].Equals(np))
            {
                i++;
            }
            if (i >= c.Count - 1)
            {
                return(null);
            }
            return(c[i + 1]);
        }
예제 #9
0
 ///<summary>Удалить все узлы дерева. (Корень сохранится, но не будет ничего содержать)</summary>
 public void Clear()
 {
     _r     = null;
     _r     = new LinkedNode <T>();
     _count = 0;
 }
예제 #10
0
 ///<summary>Создать пустое дерево (с корнем без содержимого)</summary>
 public LinkedTree()
 {
     _r       = new LinkedNode <T>();
     _visitor = new NRVisitor <T>();
     _count   = 1;
 }
예제 #11
0
        ///<summary>Получить поддерево с корнем n указанного узла дерева.</summary>
        public IPositionalTree <T> GetSubTree(Node <T> n)
        {
            LinkedNode <T> ln = n as LinkedNode <T>;

            return(new LinkedTree <T>(ln));
        }