AVL ツリーを使用して学校のプロジェクトを完了しようとしています。何が起こるかというと、ルートと他の 2 つのノードを挿入すると、すべて問題なく動作しますが、これらの 3 つ以上のノードを追加しようとすると、プログラムが失敗します。問題は、newnode のポインターが作成された後、センチネル NIL を指していないことにあると考えました。NILを指すnewnodeのポインタを設定しようとしましたが、うまくいきませんでした。
どうすればこれを修正できますか?
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cmath>
#include <stdio.h>
#include "graphvisualize.h"
using namespace std;
typedef struct node Tnode;
Tnode *root;
Tnode *NIL;
Tnode *newnode;
void InitializeTree(int k) {
//initialize the list with the root node
NIL=(Tnode *)malloc(sizeof(Tnode));
root=(Tnode *)malloc(sizeof(Tnode));
//change to null later
root->value = k;
root->parent = NIL;
root->right = NIL;
root->left = NIL;
root->height = 1;
NIL->right = NULL;
NIL->left = NULL;
NIL->parent = NULL;
}
void insert(int v) {
Tnode *newnode=(Tnode *)malloc(sizeof(Tnode));
newnode->value = v;
Tnode *y = NIL;
Tnode *x = root;
while(x != NIL) {
y = x;
if(newnode->value < x->value) {
x = x->left;
} else {
x = x->right;
}
newnode->parent = y;
if(y == NIL) {
root = newnode;
} else if(newnode->value < y->value) {
y->left = newnode;
} else {
y->right = newnode;
}
cout << "insert ";
//Heres my problem
//trying to set right and left pointer to NIL
newnode->left = NIL;
newnode->right = NIL;
}
//height manager
int h = 1;
newnode->height = h;
while((newnode->parent != NIL) && (newnode->height >= newnode->parent->height)) {
newnode = newnode->parent;
newnode->height++;
}
cout << "height-fix ";
}
//Display AVL Tree
void ViewTree() {
ofstream AVLfile;
AVLfile.open("AVLgraphfile.dot");
AVLfile << visualize_tree(root);
AVLfile.close();
}
int main() {
InitializeTree(7);
cout << "root ";
insert(5);
insert(8);
//insert(6);
ViewTree();
return 0;
}