a
/ \
a a
/ \ / \
a c a f
/ \ / \
b d e g
リンクされた構造で表される、上記のようなツリーがあります。
class Node
{
Node* leftChild;
Node* rightChild;
char data;
}
class Tree
{
Node* root;
}
私の目標は、ルートノードからリーフノードまでのすべてのパスを見つけることです。
私のツリートラバーサルアルゴリズムは次のようになります。
void inorder()
{
in(root);
}
void in(CharNode* currentNode)
{
if(currentNode)
{
in(currentNode->leftChild);
cout << currentNode->data << endl;
in(currentNode->rightChild);
}
}
これを実行すると、図のようにツリーが構築されていることを確信しています。私はそれをテストしました。ただし、ツリートラバーサルセグメンテーション違反が発生する理由を理解できません。
私が得る出力は次のとおりです:
b
Segmentation fault.
私はそれをより低い高さの木でテストしました、そしてそれは働きます。しかし、どういうわけか、高さが2を超える木では機能しません。木に問題があると思ったので、親、左の子、右の子をそれぞれ調べて印刷し、図のように印刷しました。 。したがって、これは間違いなくトラバーサルアルゴリズムです。