Как получить родителя узла дерева при построении бинарного дерева? - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь построить двоичное дерево с файлом, и у меня возникают проблемы при настройке родительского элемента для каждого узла дерева. Я знаю, что мне нужно сохранить предыдущий узел дерева, но я не знаю, как это сделать.

Я пытался использовать статическую переменную int с именем count, чтобы определить, является ли родительский узел для узла деревалевое поддерево предыдущего узла дерева или правое поддерево предыдущего узла дерева. Однако я понял, что по сути ничего не назначаю родителю.

typedef struct Treenode
{
    int data;
    struct Treenode *left, *right, *parent;
} TreeNode, *TreeNodePtr;

static int count = 0;

TreeNodePtr buildTree(FILE * in)
{
    int num;
    fscanf(in, "%d", &num);

    if (num == 0)
        return NULL;

    TreeNodePtr p = (TreeNodePtr) malloc(sizeof(TreeNode));
    TreeNodePtr prev = (TreeNodePtr) malloc(sizeof(TreeNode));


    if (count == 0)
        p->parent = NULL;
    else if (count == 1)
        p->parent = prev->left;
    else if (count == 2)
        p->parent = prev->right;

    p->data = num;

    count = 1; 
    prev->left = p->left = buildTree(in);
    count = 2;
    prev->right = p->right = buildTree(in);
    return p;
}
...