Я пытаюсь вставить в полное двоичное дерево школьное задание. Структура моего дерева такова
typedef struct TreeNode {
void * data;
struct TreeNode * left;
struct TreeNode * right;
struct TreeNode * parent;
} TNode;
typedef struct CompleteBinaryTree {
TNode * root;
TNode * last;
int numelm;
} CBTree;
У меня есть 4 способа вставки в зависимости от ситуации
- Дерево пусто
- Дерево как один узел
- Последним узлом CBT является его родительский левый потомок
- Наконец, я go вверх по дереву, пока текущий узел является правым узлом его родителя, если текущий узел не root Я передам go его брату и go вниз влево, иначе я просто go вниз влево
В настоящее время я застрял на своем третьем пути, и я не ' Я не знаю, что не так с моим кодом.
Может ли кто-нибудь направить меня sh в правильном направлении.
Спасибо!
void CBTreeInsert(CBTree* tree, void* data) {
TNode * tmp = newTNode(data);
TNode * curr = tree->last;
if(tree->root == NULL) //empty
{
tree->root = tmp;
}
else if(tree->last == tree->root) //one node
{
tree->last->left = tmp;
}
else if(tree->last->parent->right == NULL) //general
{
tree->last->parent->right = tmp;
}
else if(tree->last->parent == tree->last->parent->right) //degenarated
{
while(curr->parent == curr->parent->right)
curr = curr->parent;
if(curr != tree->root)
{
curr = curr->parent->right;
while(curr->left != NULL)
curr = curr->left;
}
curr->left = tmp;
}
else
{
while(curr->left != NULL)
curr = curr->left;
curr->left = tmp;
}
}
else
{
fprintf(stderr,"Error\n");
}
tree->last = tmp;
tree->numelm++;
}