2017-08-25 3 views
6

2つのバイナリツリーが同じかどうかをチェックする関数を記述します。問題は、私はここに戻ることはよく分からないということです深さの最初の検索の再帰的な実装では、どのようにしてboolを返すことができますか?

bool checkSame(Node* first, Node* second) { 
    // Check if nodes are the same 

    // Check left nodes: checkSame(first->left, second->left) 
    // Check right nodes: checkSame(first->right, second->right) 

} 

:よう

コードが見えます。私が見つけたすべてのDFSの実装には戻り値がありません。ブールを返す場所はありますか?

また、私は反復的な解決策ではなく、反復的な解決策を探しています。

+1

'return checkSame(...)'? –

答えて

10

再帰の代わりに他の関数を呼び出すのとまったく同じ方法で行います。

木が場合にのみ

  • のノードが等しい等しい(再帰の大きな秘密が。再帰についての特別な何もないということです)、そして
  • そのサブツリーの両方が同じである

ので

return first->data == second->data 
    && checkSame(first->left, second->left) 
    && checkSame(first->right, second->right); 

空のケースを演習として残しました。

関連する問題