中序遍历二叉树非递归思路
时间: 2023-07-23 19:05:37 浏览: 96
中序遍历二叉树的非递归思路可以使用栈来实现。具体步骤如下:
1. 初始化一个空栈和一个指向二叉树根节点的指针。
2. 将根节点入栈。
3. 当栈不为空时,执行以下步骤:
- 将当前节点的左子树依次入栈,直到当前节点的左子树为空。
- 弹出栈顶节点,访问该节点。
- 将当前指针指向弹出节点的右子树。
4. 重复步骤3,直到栈为空且当前指针为空。
这样就可以按照中序遍历的顺序遍历整个二叉树,而不使用递归。
以下是一个示例代码,演示了如何使用栈实现中序遍历的非递归算法:
```cpp
#include <iostream>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
TreeNode* curr = root;
while (curr != nullptr || !s.empty()) {
while (curr != nullptr) {
s.push(curr);
curr = curr->left;
}
curr = s.top();
s.pop();
cout << curr->val << " ";
curr = curr->right;
}
}
int main() {
TreeNode* 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);
cout << "Inorder traversal: ";
inorderTraversal(root);
return 0;
}
```
以上代码会输出二叉树的中序遍历结果。注意,在实际应用中,可以根据需要修改输出方式或者保存遍历结果。
阅读全文