コード例 #1
0
        public static BinaryNode Balance(BinaryNode node) // балансировка узла node
        {
            BinaryNode.FixHeight(node);

            if (BinaryNode.BFactor(node) == 2)
            {
                //Console.WriteLine("Balance -> BinaryNode.BFactor(node) == 2");
                if (BinaryNode.BFactor(node.Right) < 0)
                {
                    // Console.WriteLine("RotateRight");
                    node.Right = RotateRight(node.Right);
                }
                //Console.WriteLine("RotateLeft");
                return(RotateLeft(node));
            }
            if (BinaryNode.BFactor(node) == -2)
            {
                //Console.WriteLine("Balance -> BinaryNode.BFactor(node) == -2");
                if (BinaryNode.BFactor(node.Left) > 0)
                {
                    node.Left = RotateLeft(node.Left);
                }
                return(RotateRight(node));
            }
            //Console.WriteLine("Balance -> return node");
            return(node); // балансировка не нужна
        }
コード例 #2
0
        public static BinaryNode RotateLeft(BinaryNode node) // левый поворот вокруг node
        {
            BinaryNode tmp = node.Right;

            node.Right = tmp.Left;
            tmp.Left   = node;
            BinaryNode.FixHeight(node);
            BinaryNode.FixHeight(tmp);
            return(tmp);
        }