私の BST には pTree というルートがあります。それは次のように宣言されています。
KnightTree* tree;
ここで、ルート (この場合は「ツリー」) を指し、pTree=pTree->pLeftChild; を使用してもイベントを変更しない新しいポインターを持つ関数を作成する必要があります。または pTree=pTree->pRightChild; 以下の関数を呼び出す前に、次のように宣言します。
KnightTree* treeroot=tree;
次に、関数を呼び出します。
ReadNLR(tree,treeroot);
そして、関数は次のようになります。
void ReadNLR(KnightTree*&tree,KnightTree* treeroot)
{
if(tree !=NULL)
{
cout<<tree->key<<" is at the depth of "<<NodeDepth(treeroot,tree)<<endl;
cout<<treeroot->key<<endl;
ReadNLR(tree->pLeftChild,treeroot);
ReadNLR(tree->pRightChild,treeroot);
}
}
私の考えは、NLR を読み取らせ、読み取ったすべてのノードがその深さを出力することです。しかし、ここで私が抱えている問題は、ツリールートがツリーのコピーと同じであり、それらが同じであるため、深さが常に 1 であることです (ノードからルートまでの距離に 1 を加えた値として)。ツリーが変更されても変更されない最初のツリー ルートからツリールートを宣言するにはどうすればよいですか? ありがとう、そして私の英語でごめんなさい!