2進木を考えると、それらが同じかそうでないかどうかを確認するための関数を書きます。
彼らは構造的に同一であり、ノードが同じ値を持っている場合、2つのバイナリツリーが同じと考えられています。
例1:
入力:1 1 / \ / \ 2 3 2 3 [1,2,3]、[1,2,3] 出力:真
例2:
入力:1 1 / \ 2 2 [1,2]、[1、ヌル、2] 出力:偽
例3:
入力:1 1 / \ / \ 2 1 1 2 [1,2,1]、[1,1,2] 出力:偽
効果の件名:
与えられた2つのバイナリツリーは、それらが同一であるか否かを判定し、その構造は同じノード値であれば、バイナリツリーが同じです。
理解します:
ルートノードは、現在のサブツリーと同じ空の場合。空と同じではない、それは異なっています。
現在のノードが同じ値で、現在のノードと同じである場合、その左と右のサブツリーにアクセスします。
C ++コード:
/ * * *バイナリツリーノードの定義。 *構造体のTreeNode { * INTヴァル。 *のTreeNode *左; *のTreeNode *右; *ツリーノード(int型X):(NULL)左のval(X)、右(NULL){} *}。 * / クラスソリューション{ パブリック: BOOL isSameTree(ツリーノード* P、ツリーノード* Q){ 場合(p == NULL && Q == NULL)を返す 真。 それ以外の 場合((P == NULL && Q = NULL)||(P = NULL && Q ==!!{NULL)) を返す 偽。 } であれば(P->ヴァル== Q-> ヴァル){ 返す isSameTree(P->左、Q->左)&& isSameTree(P->右、Q-> 右)。 } を返す 偽。 } }。
結果:
で実行されたとき: 4 MSの メモリ消費量: 9.8メガバイトを