証明安全オファー:バイナリ検索ツリーのk番目のノード(プレオーダー)

1.タイトル説明

/ * 
    二分探索木を考えると、その中の最初のk小さいノードを検索してください。
    例えば、(5,3,7,2,4,6,8)と、第3の接続点に係る数値は、4要約です。
* /

2.アイデア

二分探索木を行きがけ、それがKの結果であります

3.非再帰

輸入 java.utilの。* ;

パブリック クラスソリューション{
     静的ツリーノードKthNode(ツリーノードPROOT、int型K){
         戻りinorderNR(PROOT、k)を、
    } 

    パブリック 静的ツリーノードinorderNR(ツリーノードPROOT、int型K){
         int型のカウント= 0 ; 
        スタック <のTreeNode> S = 新しいスタック<> (); 
        ツリーノードCURR = PROOT。
        一方、(CURR!= NULL ||!s.empty()){
             一方(CURR!= NULL ){
                s.push(CURR)。
                CURR = curr.left。
            } 
            CURR = s.pop()。
            カウント ++ ;
            もし(==カウント{k)を
                 破ります
            } 
            CURR = curr.right。
        } 
        戻りCURR。
    } 
}

4.再帰

輸入 java.utilの。* ; 

パブリック クラスソリューション{ 
    ツリーノードKthNode(ツリーノードPROOT、int型K){
         戻りinorderR(PROOT、k)を、
    } 
    公共の int型のカウント= 0; // 注意不能是静态
    公共のTreeNode inorderR(ツリーノードのルート、int型K){
         場合(!ルート= NULL ){
             //  
            ツリーノードは=左inorderR(root.left、k)を、
            もし(!左= ヌル){ リターンが左;}
             // 
            ++数えますもし(==カウントK){ 戻りルート;}
             //  
            ツリーノード右= inorderR(root.right、K)。
            もし(!右= NULL){ 戻り右;} 
        } 
        戻り ヌル
    } 
}

 

おすすめ

転載: www.cnblogs.com/haimishasha/p/11520907.html
おすすめ