void PostOrderNonRecursive(struct BinaryTreeNode *root){
    TreeStack *S = CreateStack(10);
    while(1) {
        //自分をスタックにpushして左に行けるところまで行く。
        if(root) {
            Push(S, root);
            root = root->left;
        }
        else {
            if(IsEmptyStack(S)) {
                printf("Stack is Empty\n");
                return;
            }
            //右にも行けなくなったらpopして1つ前のノードを取り出す(1つ戻る)
            else if(Top(S)->right == NULL) {
                root = Pop(S);
                printf("%d", root->data);
                //
            }
            while(root == Top(S)->right) {
                    printf("%d", Top(S)->data);
                    root = Pop(S);
            }
            
            if(!IsEmptyStack(S)){
                    root = Top(S)->right;
            }else{
                root = NULL;
            }
        }
    }
    DeleteStack(S);
}
void InorderTraversalWithoutRecursion(struct TNode* root){

    if(!root){
    return;
    }

    SNode* stack=NULL;
    while(1){

    while(root){
    Push(&stack,root);
    //printf("\n\n%d\n\n",root->data);
    root=root->left;
    }

  if(IsEmptyStack(stack)){
   break;
    }else{
   root=Pop(&stack);
   printf("%d  ",root->data);
   root=root->right;
    }
    }

}
Exemplo n.º 3
0
/* START: fig3_52.txt */
        void
        Pop( Stack S )
        {
            if( IsEmptyStack( S ) )
                Error( "Empty stack" );
            else
                S->TopOfStack--;
        }
Exemplo n.º 4
0
/* START: fig3_51.txt */
        ElementType
        Top( Stack S )
        {
            if( !IsEmptyStack( S ) )
                return S->Array[ S->TopOfStack ];
            Error( "Empty stack" );
            return 0;  /* Return value used to avoid warning */
        }
BinaryTreeNode *Top(BinaryTreeNodeStack *S){
    if(IsEmptyStack(S)){
        printf("Stack is Empty\n");
        return NULL;
    } else {
        struct BinaryTreeNode *rtndata = S -> array[S->top];
        return rtndata;
    }
}
BinaryTreeNode *Pop(BinaryTreeNodeStack *S) {
    if(IsEmptyStack(S)) {
        printf("Stack is Empty\n");
        return 0;
    }else{
        BinaryTreeNode *rtndata = S -> array[S -> top--];
        return rtndata;
    }
}
Exemplo n.º 7
0
struct TNode* Pop(SNode** stack){
if(!IsEmptyStack(*stack)){
SNode* tmpNode=(*stack);
struct TNode* tmpData=tmpNode->data;
(*stack)=(*stack)->next;
free(tmpNode);
return tmpData;
}
}
Exemplo n.º 8
0
struct BinaryTreeNode *Pop(TreeStack *S) {
    if(IsEmptyStack(S)) {
        printf("Stack is Empty\n");
        return 0;
    }else{
        struct BinaryTreeNode *rtndata = S -> array[S -> top--];
            //printf("<POP>\n");
            //DebugS(S);
        return rtndata;
    }
}
Exemplo n.º 9
0
//**************************************************************
double PopStack ( MyStack* Stack )
{
    if ( IsEmptyStack ( Stack ) == -1 )
        return -1;

    ( Stack->Head )--;
    if ( IsStackValid ( Stack ) == -1 )
        return -1;

    errno = 0;
    return Stack->Data[( Stack->Head ) + 1];
}
Exemplo n.º 10
0
void PostOrderUsingTwoStack(struct TNode* root){

SNode* stack1=NULL;
SNode* stack2=NULL;
while(1){
while(root){
Push(&stack2,root);
//printf("%d  ",root->data);
Push(&stack1,root);
root=root->right;
}

if(IsEmptyStack(stack1)){
break;
}
root=Pop(&stack1);
root=root->left;
}
//printing stack2
while(!IsEmptyStack(stack2)){
printf("%d   ",Pop(&stack2)->data);
}

}
Exemplo n.º 11
0
//흐름 처리
bool CGameProcessManager::Process()
{
	//처리할 스택이 없으면 리턴
	if(IsEmptyStack())
	{
		return false;
	}

	//프로세스 처리
	CProcessManager::Process();

	//현 프로세스 처리
	if(GetCurrentProcess())
	{
		GetCurrentProcess()->Control();	//입력 처리
	    GetCurrentProcess()->Process();	//프로세스 처리
		GetCurrentProcess()->Render();	//출력 처리
	}

	return true;
}