用c语言实现中序遍历二叉树的非递归算法
时间: 2023-10-22 09:04:54 浏览: 118
中序遍历二叉树的非递归算法需要用到栈,具体步骤如下:
1. 初始化一个空栈和一个指向根节点的指针p。
2. 如果p不为NULL或者栈不为空,则进行循环,循环条件为p不为NULL或者栈不为空。
3. 在循环中,将p指向的节点以及p的左子树节点依次入栈,直到p为NULL。
4. 弹出栈顶元素,输出该元素的值,并将p指向该元素的右子树节点。
5. 循环回到第2步。
C语言实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
void inorderTraversal(struct TreeNode* root) {
struct TreeNode* stack[1000]; // 定义栈
int top = -1; // 栈顶指针初始化为-1
struct TreeNode* p = root;
while (p != NULL || top != -1) { // 循环条件
while (p != NULL) { // 将p节点以及左子树节点入栈
stack[++top] = p;
p = p->left;
}
if (top != -1) { // 弹出栈顶元素,输出该元素的值,并将p指向该元素的右子树节点
p = stack[top--];
printf("%d ", p->val);
p = p->right;
}
}
}
```
阅读全文