function inorderTraversal(root):
result = empty list // 创建一个空列表来存储结果
stack = empty stack // 创建一个空栈来辅助遍历
current = root // 当前节点指向根节点
while current is not null or stack is not empty: // 当当前节点不为空或者栈不为空时循环执行
while current is not null: // 当当前节点不为空时循环执行
push current into stack // 将当前节点压入栈中
current = current's left child // 移动到当前节点的左子节点
current = top element of stack // 取栈顶元素作为当前节点
pop stack // 弹出栈顶元素
add current's value to result // 将当前节点值加入结果列表
current = current's right child // 移动到当前节点的右子节点
return result // 返回结果列表
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result; // 存储中序遍历结果的向量
stack<TreeNode*> st; // 辅助遍历的栈
TreeNode* current = root; // 当前节点指针
// 当当前节点不为空或者栈不为空时循环执行
while (current != nullptr || !st.empty()) {
// 当当前节点不为空时循环执行
while (current != nullptr) {
st.push(current); // 将当前节点压入栈中
current = current->left; // 移动到当前节点的左子节点
}
current = st.top(); // 取栈顶元素作为当前节点
st.pop(); // 弹出栈顶元素
result.push_back(current->val); // 将当前节点值加入结果向量
current = current->right; // 移动到当前节点的右子节点
}
return result; // 返回中序遍历结果向量
}
};
int main() {
// 创建一个二叉树
TreeNode* root = new TreeNode(1);
root->right = new TreeNode(2);
root->right->left = new TreeNode(3);
// 执行中序遍历
Solution sol;
vector<int> inorder = sol.inorderTraversal(root);
// 输出结果
cout << "Inorder traversal result: ";
for (int val : inorder) {
cout << val << " ";
}
cout << endl;
// 释放内存
delete root->right->left;
delete root->right;
delete root;
return 0;
}