Based on the book stack traversal

Preorder traversal stack-based, in sequence, after

void InOrderTraversal(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    stack<TreeNode*> st;
    while (!st.empty() || root) {
        if (root) {
            st.push(root);
            root = root->left;
        }
        else {
            root = st.top();
            st.pop();
            cout << root->data << endl;
            root = root->right;
        }
    }
}
void PreOrderTraversal(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    stack<TreeNode*> st;
    while (!st.empty() || root) {
        if (root) {
            cout << root->data << endl;
            st.push(root);
            root = root->left;
        }
        else {
            root = st.top();
            st.pop();
            root = root->right;
        }
    }
}

void PastOrderTraversal(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    stack<TreeNode*> st;
    TreeNode* last = NULL;
    while (!st.empty() || root) {
        if (root) {
            st.push(root);
            root = root->left;
        }
        else{
            root = st.top();
            if (root->right && last != root->right) {
                root = root->right;
            }
            else if ((NULL == root->right) || (last == root->right)) {
                cout << root->data << endl;
                last = root;
                st.pop();
                root = NULL;
            }
        }
    }
}

Guess you like

Origin www.cnblogs.com/ziyuemeng/p/12500941.html
Recommended