示例#1
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);
        }
示例#2
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));
            }
        }