我得到了二叉树,而不是BST,所以元素没有排序,每个节点都保存的信息是字符串类型。 当我打印在BST中保存整数的元素时,我使用这样的递归:( in_order printing)
void PrintElements(const Data* node)
{
// Check if its empty
if (node == NULL)
return;
PrintElements(node->left);
printf(" %d\n", node->key);
PrintElements(node->right);
}
但我无法弄清楚如何在二进制树中按级别打印它们,这些字符串没有排序(按字母顺序)。任何帮助都非常感谢。
答案 0 :(得分:2)
您必须实现一些辅助功能才能以递归方式按级别打印:
首先,您需要一个检索树的级别数的函数
int getLevelCount(Data *node)
{
if (node == NULL)
{
return 0;
}
int leftMaxLevel = 1 + getLevelCount(node->left);
int rightMaxLevel = 1 + getLevelCount(node->right);
if (leftMaxLevel > rightMaxLevel)
{
return leftMaxLevel;
}
else
{
return rightMaxLevel;
}
}
其次,您必须实现一个打印特定级别树的函数:
void printLevel(Data *node, int level)
{
if (node != NULL && level == 0)
{
printf("%s\n", node->key);
}
else if (node != null)
{
printLevel(node->left, level - 1);
printLevel(node->right, level - 1);
}
}
最后,打印树的每个级别(从根节点开始):
void printElements(Data *node)
{
int i;
int levelCount = getLevelCount(node);
for (i = 0; i < levelCount; i++)
{
printLevel(node, i);
}
}
希望它有所帮助。