最小距離ノードのバイナリ検索ツリー

ツリールートのバイナリ検索ルートが与えられると、ツリーは、任意の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、INTPREVAL)
    {
        もし(!のノード)
             のリターン;
        
        minDiffInBSTCore(ノード - > 左、resMin、PREVAL)。
        もし(PREVAL> 0 
            公式 =分(公式、ノード- > Val- 優勢)
        PREVAL =ノード- > valの;
        minDiffInBSTCore(ノード - > 右、resMin、PREVAL)。
        
        リターン;
    }
公共int型 minDiffInBST(TreeNodeの* ルート){
         場合(!ルート)
             の戻り 0 ;
        
        int型 Resmi = INT_MAX。
        int型 PREVAL = - 1 ;
        mindiffınbstcor(画像、流行のルート)。
        リターン絵の。
    }
}。

おすすめ

転載: www.cnblogs.com/tianzeng/p/12025101.html