c语言实现二叉树中序遍历非递归
时间: 2023-08-07 18:19:51 浏览: 123
c++实现二叉树的4种遍历(递归和非递归)(csdn)————程序.pdf
C语言实现二叉树中序遍历非递归同样需要使用栈来实现,具体步骤如下:
1. 新建一个栈和一个指针变量p,初始时p指向根节点,栈为空。
2. 循环执行以下步骤,直到栈为空且p为空:
a. 如果p不为空,则将p入栈,并将p指向其左子节点。
b. 如果p为空,则将栈顶元素出栈并输出,然后将p指向栈顶元素的右子节点。
下面是该算法的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;
struct TreeNode* p = root;
while (top != -1 || p != NULL) {
if (p != NULL) {
stack[++top] = p;
p = p->left;
}
else {
struct TreeNode* node = stack[top--];
printf("%d ", node->val);
p = node->right;
}
}
}
```
其中,struct TreeNode定义了二叉树节点的结构体,val是节点的值,left和right分别是左右子节点的指针。该算法的时间复杂度为O(n),空间复杂度为O(h),其中h为二叉树的高度。
阅读全文