如何在c中逐级打印二进制树中的元素

时间:2016-05-06 00:02:02

标签: c binary-search-tree

我得到了二叉树,而不是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);    
}

但我无法弄清楚如何在二进制树中按级别打印它们,这些字符串没有排序(按字母顺序)。任何帮助都非常感谢。

1 个答案:

答案 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);
    }
}

希望它有所帮助。