ツリールートのバイナリ検索ルートが与えられると、ツリーは、任意の2つのノードの差の最小値を返します。
例:
入力:ルート= [4,2,6,1,3、NULL、 NULL]
出力:1
説明:
注意、ルートツリーナブ(TreeNodeオブジェクト)を、配列の代わりに。
所与のツリー[4,2,6,1,3、NULL、NULL]は以下の図のように表すことができます。
4 / \ 2 6 / \ 1 3
最小の差は1であり、それは、ノード1と2の間の差であり、ノード3とノード2との間の差です。
注意:
2-100バイナリのサイズの範囲です。
常に有効なバイナリツリーは、各ノードは整数値であり、繰り返しません。
アイデア:バイナリツリートラバーサル順序は昇順されているため、順トラバーサル、検索において、最小の差が順に隣接するノードとの間に存在している必要があり、起動後順Iの使用、ルートへのアクセス最小の差は、その左右のサブツリーの間の任意の接合部に存在しないが、ルートノードで:この場合、ルートノードは、次のような問題が発生し、このとき、差の左と右のサブツリーと計算ノードでありますノードの左部分木の右端(左端ノードまたはその右のサブツリーのルートの間)の間と、この時点で、我々は結果を修正することはできません。
ノードトラバーサル配列がベクターに付加し、次にアレイ内の隣接ノード間の最小の差を見つける:CODE1
コード2:トラバーサルシーケンス、横断、サイド解きながら
/ * * *バイナリツリーノードの定義。 *構造体のTreeNode { * int型のval; *のTreeNode *左; *のTreeNode *右; *ツリーノード(INT X):ヴァル(x)は、左(NULL)、右(NULL){} *}。 * / クラスソリューション{ プライベート: 無効 minDiffInBSTCore(TreeNodeの*ノード、INT&resMin、INT&PREVAL) { もし(!のノード) のリターン; minDiffInBSTCore(ノード - > 左、resMin、PREVAL)。 もし(PREVAL> 0 ) 公式 =分(公式、ノード- > Val- 優勢) PREVAL =ノード- > valの; minDiffInBSTCore(ノード - > 右、resMin、PREVAL)。 リターン; } 公共: int型 minDiffInBST(TreeNodeの* ルート){ 場合(!ルート) の戻り 0 ; int型 Resmi = INT_MAX。 int型 PREVAL = - 1 ; mindiffınbstcor(画像、流行のルート)。 リターン絵の。 } }。