私たちは次のように、バイナリツリーTの反転動作を定義することができます任意のノードを選択し、その左部分木と右のサブツリーを交換します。
一定回数、XがYに等しいようにする限り、操作を反転した後、我々はXバイナリツリー、バイナリツリーは、Yをひっくり返すと同等です呼び出します
バイナリツリーは2個のフリップフロッ同等の機能かどうかが判断される書き込み。これらは、ツリーのルートとROOT1のroot2によって与えられています。
例:
入力:ROOT1 = [1,2,3,4,5,6、NULL、 NULL、NULL、7,8]、root2 = [1,3,2、NULL、6,4,5、NULL、NULL、NULL 、NULL、8,7]
出力:真の
説明:我々は、値1を有するノードで反転 、3、および5。
ヒント:
各ツリー100個のノードの最大値を有します。
各ツリーの各値は、範囲[0、99]の整数で、ユニークです。
出典:ボタン(LeetCode)に滞在
します。https://leetcode-cn.com/problems/flip-equivalent-binary-treesリンク
すべてのネットワークからの控除が著作権を保有します。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。
/ ** *バイナリツリーノードの定義。 *公共のクラスのTreeNode { * int型のval; *のTreeNodeは左。 *ツリーノードを右。 *ツリーノード(INT X){ヴァル= X。} *} * / クラスソリューション{ パブリック ブールflipEquiv(ツリーノードROOT1、ツリーノードroot2){ ブール K = 偽; 右 = チェック(ROOT1、root2)。 戻る権利を。 } パブリック ブールチェック(TreeNodeのROOT1、TreeNodeのroot2) { もし(ROOT1 == nullの && root2 == nullの) { 返す 真; } もし(ROOT1!= nullの && root2!= nullの) { もし(root1.val!= root2.val) { 返す 偽; } 他 { リターン(チェック(root1.left、root2.left)&& チェック(root1.right、root2.right)) || (チェック(root1.left、root2.right)&& チェック(root1.right、root2.left))。 } } 他 { 返す 偽; } } }