代码实现可到此处下载:http://download.csdn.net/detail/elcarim/6759963
当前代码工程中包含了 堆排序、快速排序、二叉查找树,后面会持续更新。
先放上代码实现,原理有时间再写。
特别的是,这次实现了一个打印二叉树结构的方法,这样在调试二叉查找树和红黑树的程序时,可以方便的观察到增加删除操作对树结构的影响。
打印树结构的代码片段:
void BSTree::PrintTreeStruct()
{
int height = GetHeight(GetRoot());
int max_leaf = 1 << height;
int ** map = (int **)malloc(sizeof(int *) * height);
for (int i = 0; i < height; ++i)
{
map[i] = (int *)malloc(sizeof(int) * max_leaf);
memset(map[i], 0, sizeof(int) * max_leaf);
}
FixCoordinate(height, GetRoot(), map);
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < max_leaf; ++j)
{
if (0 == map[i][j])
{
printf("___");
}
else
{
printf("%3d", map[i][j]);
}
}
printf("\n");
}
for (int i = 0; i < height; ++i)
{
free(map[i]);
}
free(map);
}
效果:
9为树的根节点,空节点有“___”填充,可根据喜好自行修改。