Пример #1
0
        private void FixHeight <T, V>(NodeTree <T, V> node)
        {
            var heightLeft = Height(node.Left);

            var heightRight = Height(node.Right);

            node.Height = (heightLeft > heightRight ? heightLeft : heightRight) + 1;
        }
Пример #2
0
        private void AddItem(NodeTree <T, V> node, List <V> items)
        {
            if (node == null)
            {
                return;
            }

            AddItem(node.Left, items);

            items.Add(node.Item);

            AddItem(node.Right, items);
        }
Пример #3
0
        private NodeTree <T, V> RotateLeft <T, V>(NodeTree <T, V> node)
        {
            var right = node.Right;

            node.Right = right.Left;

            right.Left = node;

            FixHeight(node);

            FixHeight(right);

            return(right);
        }
Пример #4
0
        private NodeTree <T, V> RotateRight <T, V>(NodeTree <T, V> node)
        {
            var left = node.Left;

            node.Left = left.Right;

            left.Right = node;

            FixHeight(node);

            FixHeight(left);

            return(left);
        }
Пример #5
0
        private V Find <T, V>(NodeTree <T, V> node, T key)
        {
            if (node == null)
            {
                throw new Exception("Not found item with same key");
            }

            return(comparer.Compare(key, node.Key) switch
            {
                (int)ComparisonResult.Less => Find(node.Left, key),

                (int)ComparisonResult.More => Find(node.Right, key),

                _ => node.Item
            });
Пример #6
0
        private NodeTree <T, V> Insert <T, V>(NodeTree <T, V> node, T key, V value)
        {
            if (node == null)
            {
                return(new NodeTree <T, V>(key, value));
            }

            if (comparer.Compare(key, node.Key) == (int)ComparisonResult.Less)
            {
                node.Left = Insert(node.Left, key, value);
            }
            else
            {
                node.Right = Insert(node.Right, key, value);
            }

            return(Balance(node));
        }
Пример #7
0
 private int BFactor <T, V>(NodeTree <T, V> node)
 {
     return(Height(node.Right) - Height(node.Left));
 }
Пример #8
0
 private int Height <T, V>(NodeTree <T, V> node)
 {
     return(node?.Height ?? 0);
 }
Пример #9
0
        public void Insert(T key, V value)
        {
            root = Insert <T, V>(root, key, value);

            Count++;
        }