キーボードからの入力データで構築されたバイナリ ツリーをトラバースしようとしています。二分木にデータが正常に挿入されました。私は switch ステートメントを持っています。'case 3' は、非再帰的な Inorder トラバーサル アルゴリズムを使用してバイナリ ツリーをトラバース (および出力) する必要があります。ただし、「ケース 3」が呼び出されると、EXC_BAD_ACCESS エラーが発生しますが、これはまったく意味がありません。誰かがこれで私を助けてくれたら、私はもっとうれしいです.
(RootPtr は、グローバルに定義されたバイナリ ツリーの最上位のレベル 0 ノードです。GetNodeS は、基本的に StackPtr 型ポインタの初期化関数 (malloc を使用) です。)
よろしくお願いします。
関連するコードは次のとおりです。
これらは構造体定義です。
Typedef struct treeItem
{
int data;
struct treeItem *left;
struct treeItem *right;
}Tree , *TreePtr;
typedef struct stackItem
{
TreePtr t;
struct stackItem *next;
}Stack , *StackPtr;
これらはプッシュ機能とポップ機能です。
void PushS (TreePtr TreePointer)
{
StackPtr TemPtr;
GetNodeS(&TemPtr);
(*TemPtr).t = TreePointer;
(*TemPtr).next = S;
S = TemPtr;
}
void PopS(TreePtr TreePointer)
{
StackPtr TemPtr;
GetNodeS(&TemPtr);
if (S != NULL)
{
TreePointer = (*S).t;
TemPtr = S;
S = (*S).next;
FreeNodeS(TemPtr);
}
else
printf("\nEmpty stack!");
}
これがトラバース機能で、
void iterative (TreePtr TemPtr)
{
DONE = 0;
TemPtr = RootPtr;
S = NULL;
if(items==0)
{
printf("\nTree is empty.\n\n");
DONE = 1;
}
else
{
printf("\nIterative nonrecursive inorder traversal:");
while (DONE == 0)
{
if(TemPtr != NULL)
{
PushS(TemPtr);
TemPtr = (*TemPtr).left;
}
else
if(S != NULL)
{
PopS(TemPtr);
printf(" %d", (*TemPtr).data); //the line I get the ERROR
TemPtr = (*TemPtr).right;
}
else
{
DONE = 1;
}
}
}
}
これは、反復トラバース関数を呼び出そうとする switch ケースです。
case 3:
TreePtr TemPtr;
GetNode(&TemPtr);
iterative(TemPtr);
break;