用c语言编写一个非递归的中序遍历二叉树算法,短一点
时间: 2024-10-26 11:03:07 浏览: 30
非递归算法遍历二叉树程序代码
在 C 语言中,非递归地遍历二叉树通常使用栈数据结构来辅助完成。这里是一个简单的中序遍历(先左子树,然后根节点,最后右子树)的非递归实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
void inorderTraversal(TreeNode* root) {
if (!root) return; // 避免空指针访问
stack<TreeNode*> s;
TreeNode* current = root;
while (current || !s.empty()) {
while (current) {
s.push(current);
current = current->left;
}
current = s.top(); // 弹出并访问当前节点
printf("%d ", current->val);
s.pop();
current = current->right;
}
}
// 创建、初始化二叉树示例,实际应用中你需要提供自己的创建函数
TreeNode* createTree() {
// 你的代码...
}
int main() {
TreeNode* root = createTree();
inorderTraversal(root); // 调用中序遍历
return 0;
}
```
在这个例子中,我们首先将所有左子节点压入栈中,然后弹出并访问栈顶节点(即当前节点),再将其指向右子节点。这个过程会一直持续到所有节点都被访问过。
阅读全文