void findRootIn_InfixArr(int in[],int pre[],int fstIn ,int lstIn ,int fstPre) { int i; for( i=fstIn ; i<=lstIn ;i++ ) { if( pre[fstPre] == in[i] ) { toPostFix(in ,pre ,fstIn ,i-1 ,fstPre+1); toPostFix(in ,pre ,i+1 ,lstIn ,i+1); // toPostFix(in ,pre ,i+1 ,lstIn ,fstPre+1); printf("%d\t",in[i]); return; } } }
bool ASTBuilder::term() { bool node; string Operator; if ( isdigit(nextToken().at(0)) ) //CONSTANT expected { string nextConst = nextToken(); if (match(CONSTANT) == false) return false; else //We would have matched constant { //node = ast->createTNode("constantNode", currStmtNumber, nextConst); node = true; outputVector->push_back(nextConst); return node; } } else { //Variable-name or open bracket "(" or close bracket ")" is expected string next = nextToken(); if (isalpha(next.at(0))) //VAR_NAME expected { if (match(VAR_NAME) == false) return false; } else if (next != "(" && next != ")") //Only OPEN_BRACKET OR CLOSE_BRACKET expected return false; //Here, we have matched VAR_NAME or OPEN_BRACKET or CLOSE_BRACKET if (next == "(") { consumeToken(); operatorStack->push_back(next); node = toPostFix(); consumeToken(); //Consume CLOSE_BRACKET token //CLOSE_BRACKET token detected, push all operators in stack ( until "(" ) to output while ( operatorStack->back() != "(" ) { Operator = operatorStack->back(); operatorStack->pop_back(); outputVector->push_back(Operator); } operatorStack->pop_back(); //pop OPEN_BRACKET from stack } else //next contains VAR_NAME { node = true; outputVector->push_back(next); } return node; } }
treeNode * findRootIn_InfixArr(int in[],int pre[],int fstIn ,int lstIn ,int fstPre) { int i; treeNode *root=NULL; for( i=fstIn ; i<=lstIn ;i++ ) { if( pre[fstPre] == in[i] ) { root = (struct treeNode *)malloc(sizeof(struct treeNode)); root -> lTree = toPostFix(in ,pre ,fstIn ,i-1 ,fstPre+1); root -> rTree = toPostFix(in ,pre ,i+1 ,lstIn ,i+1); printf("%d\t",in[i]); root -> data = in[i];//creatNode(in[i]); return root; } } return root; }
bool ASTBuilder::convertToAST(){ bool result = toPostFix(); if (!result) return false; else { rootNode = getRootOfExpr(); outputVector->clear(); ast->setRootNode(rootNode); return true; } }
bool ASTBuilder::toPostFix() //CONSTANT or VAR_NAME or OPEN_BRACKET or CLOSE_BRACKET expected as current token upon call to expr() { bool leftOp, rightOp; string Operator; leftOp = factor(); if (!leftOp) return false; if (nextToken() != ";") //Parse only if end-of-statement is not reached { if (nextToken() == "+" || nextToken() == "-") { Operator = nextToken(); consumeToken(); if ( !operatorStack->empty() ) { if ( operatorStack->back() != "(" ) { outputVector->push_back( operatorStack->back() ); operatorStack->pop_back(); } } operatorStack->push_back(Operator); rightOp = toPostFix(); return rightOp; } } if (nextToken() == "") { while ( !operatorStack->empty() ) { Operator = operatorStack->back(); operatorStack->pop_back(); outputVector->push_back(Operator); } } return leftOp; }
int main() { int totalNodesInTree, inFixArr[15],preFixArr[15],nodeToBeDeleted; treeNode *root = NULL; printf("\nEnter length of arr : "); scanf("%d",&totalNodesInTree); printf("\nEnter values of nodes in preorder\n"); scanArr(preFixArr,totalNodesInTree); printArr(preFixArr,totalNodesInTree); printf("\nEnter values of nodes in inorder\n"); scanArr(inFixArr,totalNodesInTree); printArr(inFixArr,totalNodesInTree); printf("\n\nPost Fix Order as shown :\n"); root = toPostFix(inFixArr,preFixArr,0,totalNodesInTree-1,0); printf("\n"); printf("after creating tree :- \n"); printf("\nPrefix Notation\n"); prefix(root); printf("\nInfix Notation\n"); infix(root); printf("\nPostfix Notation\n"); postfix(root); printf("\n"); /* printf("Enter node to be deleted :- "); scanf("%d",&nodeToBeDeleted); root = deleteFromBst(root,nodeToBeDeleted); */ ClearTree(&root); printf("After dispose :%d\n",root->data); postfix(root); printf("\n"); return 0; }
int main() { int totalNodesInTree , inFixArr[20] , preFixArr[20] ; tree *root = NULL; tree* pred = NULL; int sum; printf("\nEnter length of arr : "); scanf("%d",&totalNodesInTree); printf("\nEnter values of nodes in preorder\n"); scanArr(preFixArr,totalNodesInTree); printArr(preFixArr,totalNodesInTree); printf("\nEnter values of nodes in inorder\n"); scanArr(inFixArr,totalNodesInTree); printArr(inFixArr,totalNodesInTree); printf("\n\nPost Fix Order as shown :\n"); root = toPostFix(inFixArr,preFixArr,0,totalNodesInTree-1,0); printf("\n"); printf("after creating tree :- \n"); printf("\nPrefix Notation\n"); prefix(root); printf("\nInfix Notation\n"); infix(root); printf("\nPostfix Notation\n"); postfix(root); printf("\n"); if(isBst(root, &pred)){ printf("Its BST \n"); } else{ printf("Its not BST\n"); } printf("Final root pred => %d\n",pred -> data); return 0; }
int main() { int hight,totalNodesInTree, inFixArr[15],preFixArr[15],nodeToBeDeleted; treeNode *root = NULL; printf("\nEnter length of arr : "); scanf("%d",&totalNodesInTree); printf("\nEnter values of nodes in preorder\n"); scanArr(preFixArr,totalNodesInTree); printArr(preFixArr,totalNodesInTree); printf("\nEnter values of nodes in inorder\n"); scanArr(inFixArr,totalNodesInTree); printArr(inFixArr,totalNodesInTree); printf("\n\nPost Fix Order as shown :\n"); root = toPostFix(inFixArr,preFixArr,0,totalNodesInTree-1,0); printf("\n"); printf("after creating tree :- \n"); printf("\nPrefix Notation\n"); prefix(root); printf("\nInfix Notation\n"); infix(root); printf("\nPostfix Notation\n"); postfix(root); printf("\n"); // printf("Enter node to be deleted :- "); //scanf("%d",&nodeToBeDeleted); //root = deleteFromBst(root,nodeToBeDeleted); hight = hightOfBtree(root); printf("Hight of Tree is :- %d\n",hight); return 0; }
int main() { int totalNodesInTree, inFixArr[15],preFixArr[15]; printf("\nEnter length of arr : "); scanf("%d",&totalNodesInTree); printf("\nEnter values of nodes in preorder\n"); scanArr(preFixArr,totalNodesInTree); printArr(preFixArr,totalNodesInTree); printf("\nEnter values of nodes in inorder\n"); scanArr(inFixArr,totalNodesInTree); printArr(inFixArr,totalNodesInTree); printf("\n\nPost Fix Order as shown :\n"); toPostFix(inFixArr,preFixArr,0,totalNodesInTree-1,0); printf("\n"); return 0; }