2017-11-05 6 views
-5

ための式ツリーを作成するサンプル出力:。(例えば呼び出しは(「+ * 2 6月3日」)create_expression_treeだろう、私は接頭表記で与えられた式の文字列表現ツリーを作成したいプレフィックス式

Sample output

これは私がこれまでに取り組んできたものです:、このアプローチは動作しません

def create_expression_tree(prefix_exp_str, start_pos): 
print(start_pos) 
start_pos += 1 
op = ["+", "-", "*", "/"] 
element = prefix_exp_str[start_pos] 
if element == " ": 
    element = prefix_exp_str[start_pos + 1] 
    start_pos += 1 
if element not in op: 
    return (LinkedBinaryTree.Node(int(element)), start_pos) 
else: 
    left = create_expression_tree(prefix_exp_str, start_pos) 
    right = create_expression_tree(prefix_exp_str, left[1]) 
    return LinkedBinaryTree(LinkedBinaryTree.Node(element, left[0], right[0])) 

a = create_expression_tree("* 2 + - 15 6 4", -1) 

ノードが正しく配置されていないとして、私は純粋にしたいので、私は、スタックを使用しないようにしたいと思います。再帰的実装。

FYI:これは重複していません。私は他の人の解答を見直しましたが、私はそれらを実装しようとしましたが、同じエラーが発生します。

答えて

0

prefix_exp_str[1:]を両方の再帰呼び出しに渡しています。代わりに、2番目の再帰呼び出しは、最初の再帰呼び出しが終了した後に入力文字列の残りの部分を受け取る必要があります。

+0

@ issacking8144:あなたの入力例 "+ * 2 6/3" 'に基づいて、それは正しい選択のようですか?あなたの例で2番目の呼び出しに何を送るべきですか?あなたはそれを達成する方法を考えることができますか? –

+0

@ issacking8144:修正してください!あなたは一般的にどのように正しい位置を決め始めることができますか? –

+0

@ issacking8144:また訂正してください!それぞれの再帰呼び出しは、結果として生じるノードに加えて、次の呼び出しが開始する場所を知るように、文字列の残りの部分を返します。効率の点では、文字列をスライスしないで、代わりに関数を開始するインデックスを指定するパラメータを取るようにすることができます(そして、文字列の残りの部分の開始のインデックスを返します)。 –

関連する問題