タイトル説明
以下の条件を玄玄を満たしている場合は、ツリーのルートの少しを持っている権利は、対称バイナリツリーと呼ばれていました:
1.バイナリツリー。
2.すべてのツリーノード交換、等しいパワーの位置と対応点新しい、元のツリーの同じツリー構造の左右のサブツリー。
図中の番号は、IDノードは、外部ノードの数を表し、ノードの重みです。
今、バイナリツリー与え、私はあなたがそれサブツリー願って、ツリーは対称サブバイナリツリー、およびノードの最大数です。ツリー出力サブツリーノードしてください。
注意:樹木の根のみが対称バイナリツリーです。この問題の規則では、Tのサブルートノードに「サブツリー」とは:バイナリツリーノードTとその後続ノードのすべてを。
入力形式
最初の行、正の整数nは、ツリーの特定のノードの数、所定のノード番号1-nは、1がルートノードです。
ノードのためのスペースで分離された第2行、N-正の整数、i番目の正の整数重みVI I。
2つの正の整数のLi、次のn行は、riは、それぞれ、左と右の子ノード番号i。右/左の子は、-1手段が存在しない場合。二つの数字の間のスペースで区切られています。
出力フォーマット
合計行は、2つの対称的なフォークツリーノード与えられた最大ツリーを示す整数を含んでいます。
サンプル入力
2
1 3
2 -1
-1 -1
サンプル出力
1
問題の解決策
対称パリンドローム、既知の文字列のアルゴリズムを考えます。
manacher?しません。そして、それをハッシュ。
二つの配列トラバーサルを得るために、ツリー全体にわたり(左 - - ルート右)全体ツリートラバーサルシーケンスを介して、その後、前順をオンにします。
重量は直接ハッシュを設定することができます。構造?
それは同じ構造か否かを判断することができるように、実際には、我々は、各ノードのレコードのハッシュを有するサブツリーのノード数に対応することができます。
注:この保険は権利がある、彼はいくつかのハッシュを比較するように、ハッシュは、二重あるいは3つのハッシュすることができます。