Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

TestAVLRedBlackTree.cpp

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 #include <stdlib.h>
00010 #include <stdio.h>
00011 #include "TestAVLRedBlackTree.h"
00012 
00013 void Shuffle (int *Array, int n)
00014 {  
00015     for (int i = 0; i < n; i++)
00016     {
00017         int j = i + rand () % (n - i);
00018         int t = Array[j];
00019         Array[j] = Array[i];
00020         Array[i] = t;
00021     }
00022 }
00023 
00024 int RecurseTree (AVLRedBlackNode<int> *Node, int *Count, int GreaterEqual, int LessEqual, bool* Done)
00025 {
00026     if (Node) 
00027     {
00028 
00029         const int Data = *(Node->m_Data);
00030         int NodeLeft = 1;
00031         int NodeRight = 1;
00032 
00033         (*Count)++;
00034 
00035         if (!(Data >= GreaterEqual) || !(Data <= LessEqual))
00036         {
00037             printf (" Node %d is out of order in the tree.\n", Data);
00038             *Done = true;
00039         }
00040 
00041         if (Node->m_Left)
00042             NodeLeft = RecurseTree(Node->m_Left, Count, GreaterEqual, Data - 1, Done);
00043         if (Node->m_Right)
00044             NodeRight = RecurseTree(Node->m_Right, Count, Data + 1, LessEqual, Done);
00045           
00046         if (Node->m_Color != RED && Node->m_Color != BLACK)
00047         {
00048             printf (" Node %d is neither red nor black (%d).\n", Data, Node->m_Color);
00049             *Done = true;
00050         }
00051 
00052         if ((Node->m_Color == RED) && (Node->m_Left) && (Node->m_Left->m_Color == RED))
00053         {
00054             printf (" Red node %d has red left child %d\n", Data, *(Node->m_Left->m_Data));
00055             *Done = true;
00056         }
00057   
00058         if ((Node->m_Color == RED) && (Node->m_Right) && (Node->m_Right->m_Color == RED))
00059         {
00060             printf (" Red node %d has red right child %d\n", Data, *(Node->m_Right->m_Data));
00061             *Done = true;
00062         }
00063   
00064         if (NodeLeft != NodeRight)
00065         {
00066             printf (" Node %d has two different black-heights: left bh=%d, " "right bh=%d\n", Data, NodeLeft, NodeRight);
00067             *Done = true;
00068         }
00069 
00070         return (Node->m_Color == BLACK) + NodeLeft;
00071     }
00072 
00073     return 1;
00074 }

Generated on Sat Nov 5 11:20:16 2005 for Cpp Freecell Solver by  doxygen 1.4.4