バイナリ検索ツリーからleaf node
を削除しようとしていますが、それは私にとってはうまくいかず、コードをデバッグしても問題が見つかりません。私は流れが正確であることを見ることができます、呼び出しはleaf node
アドレスに達し、free
を呼び出します。しかしその後、私がpre-order
を実行したとき、私は値がまだそこにあるのを見ます。バイナリツリーのリーフノードを削除します
私が作成したバイナリツリー(そのシンプルな1) - := 14
削除する
10
/ \
6 14
Leaf Node
値。
削除前Pre - order
トラバーサル結果= 10->6->14
。これは私のコンソールに表示されます。 leaf node
削除する
コード - :
// Delete a leaf node
void deleteNode(struct Nodes * root,int value){
// Check if root is null
if (root == NULL) {
return;
}
// If no left and right node present, it's a leaf node. Perform delete.
while (root->left == NULL && root->right == NULL) {
// Check if value at leaf node is same as value to be deleted. If yes, go inside (if).
if (root->info == value) {
printf("Delete the leaf node \n");
printf("delete node address is \n %p",root);
// free the root (which is currently a leaf node)
free(root);
return;
}
}
// keep checking if value to be deleted is on right or left, till a value is found.
if (root->info < value) {
// Ccheck on right
deleteNode(root->right,value);
}else{
// check on left
deleteNode(root->left,value);
}
}
を私はerrors
を得ることはありませんので、私は根本原因を推測することはできませんよ。
削除後Pre - order
トラバーサル結果= 10->6->14
。誰か助けてくれますか?私は非常にばかげたミスをしていることを知っている、または私のコンセプトはまだ透明ではありません。
その他の情報が必要な場合は教えてください。
画像の出力 - :私は正しい値と同じアドレスを参照してください。
何とか 'free()' -dノードを 'NULL'に設定する必要があります。それ以外の場合は、無効なメモリを読み込みます。 –
@SouravGhosh私はroot = NULLを試しました。同じ結果です。無効なメモリを確認するにはどうしたらいいですか? –
Cは値渡しを使っています.... –