#include <stack>
#include <iostream>
using namespace std;
// 假设二叉树节点定义如下
struct TreeNode {
int value;
TreeNode* left;
TreeNode* right;
TreeNode(int val) : value(val), left(nullptr), right(nullptr) {}
};
typedef TreeNode* BinTree;
void PostOrder(BinTree T) {
if (T == nullptr) return;
stack<BinTree> stack;
BinTree current = T;
BinTree lastVisited = nullptr;
while (!stack.empty() || current != nullptr) {
if (current != nullptr) {
// 访问左子树
stack.push(current);
current = current->left;
} else {
// 检查是否可以访问右子树或回溯到父节点
BinTree peekNode = stack.top();
if (peekNode->right != nullptr && lastVisited != peekNode->right) {
// 访问右子树
current = peekNode->right;
} else {
// 访问节点
cout << peekNode->value << " ";
lastVisited = stack.top();
stack.pop();
}
}
}
}
// 示例:如何使用 PostOrder 函数
int main() {
// 构建一个简单的二叉树
// 1
// / \
// 2 3
// / \
// 4 5
BinTree root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
PostOrder(root); // 输出: 4 5 2 3 1
return 0;
}