我寫了一個二叉樹代碼,用於在非遞歸方法中插入元素。代碼沒有按預期工作。不管有多少次我調試代碼,沒有什麼似乎是錯的,但我得到錯誤的結果。我希望你們能幫忙。提前致謝。非遞歸二叉樹插入()方法不起作用
void insert(int element){
if(root == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq));
node->ele = element;
node->left = NULL;
node->right = NULL;
root = node;
cout << root->ele << "\n";
}
else{
struct elemq *ref;
ref = root;
while(ref != NULL){
if(element <= ref->ele){
if(ref->left == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq));
node->ele = element;
node->left = NULL;
node->right = NULL;
ref->left = node;
break;
}
else{
ref = ref->left;
}
}
else if(element > ref->ele){
if(ref->right == NULL){
struct elemq *node;
node = (struct elemq *)malloc(sizeof(struct elemq));
node->ele = element;
node->left = NULL;
node->right = NULL;
ref->right = node;
break;
}
else{
ref = ref->right;
}
}
}
}
}
每次我試圖插入一個元素,每個元素都被視爲root
,不僅是第一次。所以,每一次,if(root == NULL)
的條件是true
。我將root
聲明爲全局變量,並將其初始化爲NULL
,main()
。我通過將cout <<
置於第一個if()
的條件來了解這一點。我將之前的帖子修改爲這個新問題。
神聖的縮進! ;) – goji
某處某處的代碼是垃圾根。在整個地方插入'cout << root <<「\ n」;'看看它是否回到零。然後找到它發生的地方... – Yakk
它是我的錯誤。抱歉。每次我插入一個元素時,我都會將根設爲null。謝謝 –