Show Me The Code:
#include
#include
#include
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x)
: val(x),
left(nullptr),
right(nullptr)
{}
TreeNode(int x, TreeNode* left, TreeNode* right)
: val(x)
, left(left)
, right(right)
{}
};
class Solution
{
public:
vector<int> postorderTraversal(TreeNode* root)
{
stack<TreeNode*> st;
TreeNode* prev = nullptr;
TreeNode* cur = root;
vector<int> v;
//左子树,右子树,根
while (cur || !st.empty())
{
//左边的统统入栈
while (cur)
{
st.push(cur);
cur = cur->left;
}
//取栈顶的右子树访问
TreeNode* top = st.top();
//如果右子树也为空,且它的右边已经访问过了,就可以访问这个节点了
if (top->right==nullptr||top->right==prev)
{
v.push_back(top->val);
st.pop();
prev = top;
}
else
{
cur = top->right;//往右边走。
}
}
return v;//返回..
}
};
void Test()
{
TreeNode* node1 = new TreeNode(1);
TreeNode* node2 = new TreeNode(2);
TreeNode* node3 = new TreeNode(3);
TreeNode* node4 = new TreeNode(4);
TreeNode* node5 = new TreeNode(5);
TreeNode* node6 = new TreeNode(6);
node1->left = node4;
node1->right = node2;
node4->left = node5;
node5->right = node6;
node2->left = node3;
vector<int> v = Solution().postorderTraversal(node1);
for (auto& i : v)
{
cout << i << " ";
}
cout <<endl;
}