0

演算子、変数、および整数を使用するバイナリ表現ツリーを構築しています。

ユーザーが式を入力すると、スペースに基づいてトークン化され、各トークンがスタックに配置されます。

例えば、

ユーザーは次のように入力します: ab +

スタックは Stack = ["+", "b", "a"] になります

式ノードを作成する関数があります。

xpNode* createExpressionNode(char token[], xpNode *left, xpNode *right)

これは、再帰の概念を理解するのに苦労しているところです。これは、これがどのように機能するかを理解するのに役立つように思いついた疑似コードです。誰かが見て、スタックが空のときに何をすべきか、そしてここで他に何か問題があるかどうかを明らかにしていただければ幸いです。

xpNode* createTree(Stack *stack){
{
   xpNode *node;
   get the top of the stack and store it in data
   pop the stack
   if the stack is empty, do something //im lost on what to do here
   if the top is an integer, node = createExpressionNode(data, NULL NULL) //the left and right arguments will always be NULL because integer's wont have any children
   if the top is a variable, node = createExpressionNode(data, NULL, NULL) //the left and right arguments will always be NULL because variables wont have any children
   if the top is an operator, node = createExpressionNode(data, createTree(stack), createTree(stack)) //Operators have children so we need to recursively get them

   return node
}

入力の結果: ab + は、次のようなツリーになります。

     +
    / \
   a   b 
4

2 に答える 2

0

そこでスタックが空の場合、入力形式にエラーがありました。たとえば、スタックが の場合[+ * 2 3]、ツリーを構築できません。もう 1 つの値が必要です。

于 2013-11-10T22:01:20.707 に答える