首页 > 解决方案 > 修改链表使其变成二叉树

问题描述

以下是用于创建链表的结构格式:

struct LetterFrequencyPair
{
    char character;
    int frequency;
    struct LetterFrequencyPair* next;
};

/ ******************************************************* *******************************\

void createList()
{
    char c;
    int f;
    struct LetterFrequencyPair* temp;

    temp = malloc(sizeof(struct LetterFrequencyPair));
    printf("Enter the Character: ");
    scanf("%c", &c);
    temp->character = c;
    printf("Enter the frequency of the character: ");
    scanf("%d", &f);
    getchar();
    temp->frequency = f;
    temp->next = NULL;

    if (root == NULL)
    {
        root = temp;
    }
    else
    {
        struct LetterFrequencyPair* p;
        p = root;

        while (p->next != NULL)
        {
            p = p->next;
        }
        p->next = temp;     
    }
    printf("\n");
}

以上是我为创建链表而编写的函数。

我的问题是如何修改这个函数和结构来生成二叉树?

我知道我必须更改结构以具有指向左右孩子的指针,而不是下一个。但是当我试图将它们连接起来时,我遇到了困难,因为有两个不同的方向。我在下面粘贴了我尝试的修改:

struct LetterFrequencyPair
{
    char character;
    int frequency;
    //Creating a pointer to point to the next child in the list
    struct BinaryTreeNode* leftChild;
    struct BinaryTreeNode* rightChild;
};

 void createList()
 {
    char c;
    int f;
    struct LetterFrequencyPair* temp;

    temp = malloc(sizeof(struct LetterFrequencyPair));
    printf("Enter the Character: ");
    scanf("%c", &c);
    temp->character = c;
    printf("Enter the frequency of the character: ");
    scanf("%d", &f);
    getchar();
    temp->frequency = f;
    temp->leftChild = NULL;
    temp->rightChild = NULL;

    if ((rootRight = NULL) && (rootLeft = NULL))
    {
        root = temp;
    }
    else
    {
        struct LetterFrequencyPair* p;
        p = root;

        while (p->leftChild != NULL)
        {
            p = p->leftChild;
        }
        p->leftChild = temp;

        struct LetterFrequencyPair * p1;
        p1 = root;

        while (p1->rightChild != NULL)
        {
            p1 = p1 ->rightChild;
        }
            p1->rightChild = temp;
    }

printf("\n");
}

标签: cstructlinked-listbinary-treeparent-child

解决方案


推荐阅读