Пример #1
0
        private static void ZigZag(BinarySearchTreeNode node, BinarySearchTreeNode.SideOfParent side)
        {
            var p = node.Parent;
            var q = node.Parent.Parent;

            BinarySearchTreeNode.ReplaceChild(q.Parent, q, node);
            p.Parent = node;
            q.Parent = node;

            var nl = node.Left;
            var nr = node.Right;

            if (side == BinarySearchTreeNode.SideOfParent.LEFT)
            {
                node.Left  = q;
                node.Right = p;
                p.Left     = nr;
                q.Right    = nl;
            }
            else
            {
                node.Left  = p;
                node.Right = q;
                p.Right    = nl;
                q.Left     = nr;
            }
        }
Пример #2
0
        private static void Zig(BinarySearchTreeNode node, BinarySearchTreeNode.SideOfParent side)
        {
            var p = node.Parent;

            BinarySearchTreeNode.ReplaceChild(p.Parent, p, node);

            if (side == BinarySearchTreeNode.SideOfParent.LEFT)
            {
                var nr = node.Right;
                node.Right = p;
                p.Left     = nr;
            }
            else
            {
                var nl = node.Left;
                node.Left = p;
                p.Right   = nl;
            }
        }