2016-05-15 9 views
0

左から右へ配列を横切って各要素を挿入することにより、バイナリ検索ツリーが作成されました。この木はバランスのとれた木ではないかもしれません。異なる要素を持つバイナリ検索ツリーがある場合、このツリーにつながっている可能性のあるすべての配列を出力します。BST(バイナリ検索ツリー)からリンクリストアレイ

この質問に答えるために、私は次のコードを書きました。それでも、すべてのケースでツリーにつながる可能性のあるすべての配列を出力するわけではありません。あなたは何を修正すべきだと思いますか?

答えて

0

グラフでAがBの祖先であり、Aが配列内でBよりも先にあるとします。他に何も仮定することはできません。 したがって、配列は次の再帰関数によって生成できます。

function sourceArrays(Tree t) 

    // leafe node 
    if t == null 
    return empty list; 

    r = root(t); 
    append r to existing arrays; 

    la = sourceArrays(t.left); 
    ra = sourceArrays(t.right); 

    ac = createArrayCombitations(la, ra); 
    append ac to existing arrays; 

end 

function createArrayCombitations(la, ra) 


    foreach a in la 
    foreach b in ra 
     r = combineArrays(a,b); 
     add r to result; 
    end 
    end 

end 

function combineArrays(a, b) 
    generate all combinations of elements from two array such that order of elements in each array is preserved. 
    Ie if x precedes y in a or b the x precedes y in result 
+0

私はあなたの答えの最後の部分を理解していません!それを私に説明してもらえますか? – voguendi

+0

"最後の部分"はどういう意味ですか? – jira

+0

関数combineArrays(a、b) 各配列の要素の順序が保存されるように、2つの配列の要素のすべての組み合わせを生成します。 xがaまたはbにyよりも先行する場合、xは結果のyに先行する – voguendi

関連する問題