Ejemplo n.º 1
0
        private void InOrder(TAvlNode <int, int> node, ref List <int> result)
        {
            if (node == null)
            {
                return;
            }

            InOrder(node.Left, ref result);
            result.Add(node.Key);
            InOrder(node.Right, ref result);
        }
Ejemplo n.º 2
0
        private TAvlNode <int, int> _Add(TAvlNode <int, int> curNode, int key, int value)
        {
            if (curNode == null)
            {
                var newNode = new TAvlNode <int, int> (key, value);
                newNode.Height = 1;
                return(newNode);
            }

            if (key < curNode.Key)
            {
                curNode.Left = _Add(curNode.Left, key, value);
                curNode.Height++;
            }
            else if (key > curNode.Key)
            {
                curNode.Right = _Add(curNode.Right, key, value);
                curNode.Height++;
            }
            else
            {
                //curNode.Key == key;
                curNode.Value = value;
            }

            //Rotate if node now becomes unbalanced.
            var factor = curNode.GetBalanceFactor();

            if (factor > 1 && curNode.Left != null && curNode.Left.GetBalanceFactor() > 1)
            {
                //LL
            }
            if (factor < 0 && curNode.Right != null && curNode.Right.GetBalanceFactor() > 1)
            {
                //RR
            }
            if (factor > 1 && curNode.Left != null && curNode.Right.GetBalanceFactor() > 1)
            {
                //LR
            }
            if (factor < 0 && curNode.Right != null && curNode.Left.GetBalanceFactor() > 1)
            {
                //RL
            }


            return(curNode);
        }
Ejemplo n.º 3
0
        private bool _IsBalanced(TAvlNode <int, int> node)
        {
            if (node == null)
            {
                return(true);
            }

            if (Math.Abs(node.GetBalanceFactor()) > 1)
            {
                return(false);
            }
            else
            {
                return(_IsBalanced(node.Left) && _IsBalanced(node.Right));
            }
        }
Ejemplo n.º 4
0
 public void Add(int key, int value)
 {
     _root = _Add(_root, key, value);
 }
Ejemplo n.º 5
0
 public AVLTree(TAvlNode <int, int> root)
 {
     _root = root;
 }
Ejemplo n.º 6
0
 public TAvlNode(TAvlNode <TKey, TValue> node)
 {
     Key    = node.Key;
     Value  = node.Value;
     Height = 1;
 }