非递归中序遍历二叉树的代码C++
时间: 2024-08-12 09:00:19 浏览: 54
非递归中序遍历二叉树通常使用栈数据结构来实现,这样可以避免直接使用递归调用带来的额外函数调用开销。以下是C++中的非递归中序遍历二叉树的代码示例:
```cpp
#include <iostream>
#include <stack>
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void nonRecursiveInOrderTraversal(TreeNode* root) {
std::stack<TreeNode*> stack;
TreeNode* current = root;
while (current != nullptr || !stack.empty()) {
// 将所有左子节点压入栈中
while (current != nullptr) {
stack.push(current);
current = current->left;
}
// 弹出栈顶元素并访问,然后移动到其右子节点
current = stack.top();
stack.pop();
std::cout << current->val << " ";
current = current->right;
}
}
int main() {
// 假设有一个已经构建好的二叉树
// 这里省略实际创建二叉树的代码
nonRecursiveInOrderTraversal(root); // 调用函数并传入根节点
return 0;
}
```
在这个代码中,我们首先将左子节点推入栈中,直到遇到空节点。然后,每次从栈顶取出一个节点,访问它的值,然后移动到其右子节点,继续这个过程,直到栈为空且当前节点也为NULL。
阅读全文