二叉树迭代遍历

struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 };

/*前序*/
vector<int> preorderTraversal(TreeNode *root) {
    vector<int> result;
    if(!root) return result;
    stack<TreeNode*> stack;
    stack.push(root);
    TreeNode* cur = NULL;
    while(!stack.empty())
    {
        cur = stack.top();
        result.push_back(cur -> val);
        stack.pop();
        if(cur -> right) stack.push(cur -> right);
        if(cur -> left) stack.push(cur -> left);
    }
    return result;
    } 

/*中序*/
 vector<int> inorderTraversal(TreeNode* root) {
    vector<int> result;
    if(!root) return result;
    stack<TreeNode*> stack;
    TreeNode* cur = root;
    while(cur != NULL || !stack.empty())
    {
        if(cur)
        {
            stack.push(cur);
            cur = cur -> left;
        }
        else
        {
            cur = stack.top();
            result.push_back(cur -> val);
            stack.pop();
            cur = cur -> right;
        }
    }
    return result;
}

/*后序*/
vector<int> postorderTraversal(TreeNode* root) {
    vector<int> result;
    if(!root) return result;
    stack<TreeNode*> stack;
    stack.push(root);
    TreeNode* cur = NULL;
    while(!stack.empty())
    {
        cur = stack.top();
        if(cur -> left == NULL && cur -> right == NULL)
        {
            result.push_back(cur -> val);
            stack.pop();
        }
        else
        {
            if(cur -> right)
            {
                stack.push(cur -> right);
                cur -> right = NULL;
            }
            if(cur -> left)
            {
                stack.push(cur -> left);
                cur -> left = NULL;
            }
        }
    }
    return result;
}

你可能感兴趣的:(二叉树迭代遍历)