전공 지식/자료구조 && 알고리즘

Inorder Traversal 을 반복문으로 코딩하는 방법

큼큼이 2018. 10. 22. 13:31

목표 : Stack을 이용하여 중위순회반복문으로 구현할 수 있다.


일반적으로 순회는 재귀를 이용하여 구현하는데 반복문으로 구현하는 것이 목표다.

중위 순회의 순서는 다음과 같다.

1. left SubTree

2. root Node

3. right SubTree

#include <iostream>
#include <stack>
using namespace std;
struct Node {
    Node* left;
    Node* right;
    int value;
};
stack <Node *> Nodestack;

void push(Node* node) {
    Nodestack.push(node);
}

Node* pop() {
    Node* node = Nodestack.top();
    Nodestack.pop();
    return node;
}

void iterativeInorderTrav(Node* root) {
    Node *ptr;
    ptr = root;
    while(1) {
        while(ptr != NULL) {
            Nodestack.push(ptr);
            ptr = ptr->left;
        }
        if(Nodestack.empty())
            break;
        ptr = Nodestack.top();
        Nodestack.pop();
        printf("%d ",ptr->value);
        ptr = ptr->right;
    }
}