コード例 #1
0
        public NodeRBT <T> GetSuccessor()
        {
            NodeRBT <T> x = this;

            if (x.right != RBT <T> .nil)
            {
                return(RBT <T> .GetMinNode(x.right));
            }
            NodeRBT <T> y = x.p;

            while (y != RBT <T> .nil && x == y.right)
            {
                x = y;
                y = y.p;
            }
            return(y);
        }
コード例 #2
0
        private void LevelOrder(RBT <T> T) // Breadth
        {
            int         level      = 0;
            int         height     = T.GetHeight(T.root);
            var         queue      = new Queue <NodeRBT <T> >();
            Queue <int> queueLevel = new Queue <int>();

            if (T.root != nil)
            {
                // enqueue current root
                queue.Enqueue(T.root);
                queueLevel.Enqueue(0);
                int currentLevel = 0;
                // while there are nodes to process
                while (queue.Count != 0)
                {
                    // dequeue next node
                    NodeRBT <T> node = queue.Dequeue();
                    level = queueLevel.Dequeue();
                    if (currentLevel != level)
                    {
                        currentLevel = level;
                        Console.WriteLine();
                    }
                    Console.Write($"{(node.color == Color.RED?"[":"(")}{node.key}{(node.color == Color.RED ? "]" : ")")}:L:{level}({node.left},{node.right}),");

                    // enqueue child elements from next level in order
                    if (node.left != nil /* tree has non-empty left subtree*/)
                    {
                        queue.Enqueue(node.left);
                        queueLevel.Enqueue(level + 1);
                    }
                    if (node.right != nil /*tree has non-empty right subtree */)
                    {
                        queue.Enqueue(node.right);
                        queueLevel.Enqueue(level + 1);
                    }
                }
                Console.WriteLine();
            }
        }
コード例 #3
0
        static void Main(string[] args)
        {
            //BST<int> myTree= new BST<int>();
            //myTree.InsertValue(10);
            //myTree.InsertValue(5);
            //myTree.InsertValue(20);
            //myTree.InsertValue(1);
            //myTree.InsertValue(4);
            //myTree.InsertValue(15);
            //myTree.InsertValue(31);
            //int h = rand.Next(10, 20);
            //for (int i = 0; i < h; i++)
            //{
            //    int v = rand.Next(100);
            //    myTree.InsertValue(v);
            //    Console.Write($"{v}, ");
            //}
            //Console.WriteLine();
            //Console.WriteLine("IN ORDER");
            //myTree.InOrder();
            //Console.WriteLine();
            //Console.WriteLine("LEVEL ORDER");
            //myTree.LevelOrder();
            //Console.WriteLine();
            //Console.WriteLine($"Height: {myTree.GetHeight()}");
            //Console.WriteLine();
            //var foundNode = myTree.SearchTree(15);
            //if (foundNode != null)
            //{
            //    Console.WriteLine(foundNode.key);
            //}
            //Console.WriteLine();
            //int value = 93;
            //foundNode = myTree.SearchTree(value);
            //if (foundNode != null)
            //{
            //    Console.WriteLine($"Successor of {value} : { myTree.SearchTree(value).GetSuccessor().key}");
            //}
            //value = rand.Next(34);
            //foundNode = myTree.SearchTree(value);

            //if (foundNode != null)
            //{
            //    Console.WriteLine($"Delete {value}");
            //    myTree.DeleteNode(foundNode);
            //}

            //Console.WriteLine("IN ORDER");
            //myTree.InOrder();
            //Console.WriteLine();
            //Console.WriteLine("POST ORDER");
            //myTree.PostOrder();
            //Console.WriteLine();
            //Console.WriteLine("PRE ORDER");
            //myTree.PreOrder();
            //Console.WriteLine();
            //Console.WriteLine("LEVEL ORDER");
            //myTree.LevelOrder();
            //Console.WriteLine($"Height: {myTree.GetHeight()}");

            //Shuffle(myTree.nodes);
            //foreach (var item in myTree.nodes)
            //{
            //    Console.Write($"{item},");
            //}
            //Console.WriteLine();

            var myRBTree = new RBT <int>();

            myRBTree.InsertValue(1);
            myRBTree.InsertValue(6);
            myRBTree.InsertValue(4);
            myRBTree.InsertValue(7);
            myRBTree.InsertValue(2);
            myRBTree.InsertValue(5);
            myRBTree.InsertValue(3);
            myRBTree.InsertValue(9);
            myRBTree.LevelOrder();

            //Console.WriteLine(myRBTree.Search(4).GetSuccessor());
        }