2本の木が同じかどうかを再帰的に判断する
再帰的な書き方は2本の木が同じかどうかを判断します.
judge関数をboolに設定してtrueまたはfalseを返すと、このような再帰はよくわかりません.内層がtrueを返すと、外層がfalseを返すので、内層breakでも外に1層飛び出すだけで、直接一番外に戻ることはできません.
このような外にflagを挿入する再帰的な書き方は、デバッグを書くのによくわかります.
デフォルトの2本の木は等しいので、judge関数は1つのことをします:2本の木のどんな異なる場所に出会ってflagをfalseに変えて、このように判断の唯一性を保証することができます.
bool flag = true; // , flag , ,
void judge(node* root1, node* root2)
{
if(root1 == root2) return; // , flag
if((root1 == NULL && root2 != NULL) || (root2 == NULL && root1 != NULL))
{
// ,
flag = false;
return;
}
if(root1->data != root2->data)
{
flag = false;
return;
}
judge(root1->left,root2->left);
judge(root1->right, root2->right);
}
judge関数をboolに設定してtrueまたはfalseを返すと、このような再帰はよくわかりません.内層がtrueを返すと、外層がfalseを返すので、内層breakでも外に1層飛び出すだけで、直接一番外に戻ることはできません.
このような外にflagを挿入する再帰的な書き方は、デバッグを書くのによくわかります.
デフォルトの2本の木は等しいので、judge関数は1つのことをします:2本の木のどんな異なる場所に出会ってflagをfalseに変えて、このように判断の唯一性を保証することができます.