이진 표현 트리를 평가하고 싶습니다. 지금까지 내가 소집 한 코드입니다. 나는 그것을 평가할 때 나무의 노드를 파괴하고있다. 그러나 문제는 재귀하는 동안 그것이 가지고 있지 않은 데이터를 찾는다는 것입니다. 그것은 단순히 0이진 표현 트리 평가
void calc(bnode *&b)
{
bnode *c;
int m;
switch (b->data.ch)
{
case '+':m=b->lchild->data.in+b->rchild->data.in;
break;
case '-':m=b->rchild->data.in-b->lchild->data.in;
break;
case '*':m=b->lchild->data.in*b->rchild->data.in;
break;
case '/':m=b->lchild->data.in/b->rchild->data.in;
break;
case '%':m=b->lchild->data.in%b->rchild->data.in;
break;
}
c=new(bnode);
c->lchild=NULL;
c->rchild=NULL;
c->tag=1;
c->data.in=m;
b=c;
}
int eval(bnode *b)
{
if (b->tag==1)
return b->data.in;
else
{
if (b->lchild->tag==0)
eval(b->lchild);
if (b->rchild->tag==0)
eval(b->rchild);
if (b->lchild->tag==1&&b->rchild->tag==1)
calc(b);
}
}
반환에 계속 그리고 내가 사용하는 구조는
union un
{
int in;
char ch;
};
struct bnode{
bnode *lchild;
un data;
int tag;
bnode *rchild;
};
어떤 일이 발생했는지 더 자세히 설명해 주시겠습니까? – dzada