Err_t PRNTreeProcess(CBinaryTree<rpn_t>** RPNTree,rpn_t* expression) { CStack<nodeType<rpn_t>* > box; /*Using a stack box to process the expression*/ nodeType<rpn_t>* newNode; nodeType<rpn_t>* left,*right; rpn_t* idx=expression; if((RPNTree==NULL)||(expression==NULL)) return INVALIDE_PARAMET; while(idx->type!=TYPE_NULL) { /*Process number*/ if(idx->type==TYPE_NUMBER) { newNode=new nodeType<rpn_t>; newNode->elem=*idx; newNode->lLink=NULL; newNode->rLink=NULL; box.PushNoCopy(&newNode); idx++; continue; } /* * If it is a operators then pop out 2 element from the box,build a tree; */ if(idx->type==TYPE_OP) { newNode=new nodeType<rpn_t>; newNode->elem=*idx; newNode->lLink=NULL; newNode->rLink=NULL; box.PopNoCopy(&right); box.PopNoCopy(&left); (*RPNTree)->SetRoot(newNode); (*RPNTree)->SetLeftChild(left); (*RPNTree)->SetRightChild(right); box.PushNoCopy(&newNode); idx++; } } return RETURN_SUCCESS; }