Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
2
/
3
return [3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
vector<int> postorderTraversal(TreeNode* root) { vector<int>result; if (root == NULL)return result; stack<TreeNode*>st; bool flag; TreeNode* temp; do { while (root != NULL)//左结点入栈 { st.push(root); root = root->left; } flag = true;//设置root 为已经访问过 temp = NULL;//temp 指向栈顶结点的前一个已访问的结点 while (!st.empty() && flag) { root = st.top(); if (root ->right == temp)//右孩子不存在或者右孩子已经访问过 则访问 root结点 { result.push_back(root->val);//访问 st.pop(); temp = root;//指向被访问的结点 } else { root = root->right; flag = false;//设置为未被访问过 } } } while (!st.empty()); return result; }