演算子、変数、および整数を使用するバイナリ表現ツリーを構築しています。
ユーザーが式を入力すると、スペースに基づいてトークン化され、各トークンがスタックに配置されます。
例えば、
ユーザーは次のように入力します: 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