Пример #1
0
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;
	}
    }
}
Пример #2
0
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;
	}
}
Пример #3
0
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;
}
Пример #4
0
bool ASTBuilder::convertToAST(){
	bool result = toPostFix();

	if (!result)
		return false;
	else
	{
		rootNode = getRootOfExpr();
		outputVector->clear();
		ast->setRootNode(rootNode);
		return true;
	}
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
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;
}
Пример #8
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;
}
Пример #9
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;
}