二叉树前序遍历非递归的C语言代码
时间: 2023-02-05 18:30:25 浏览: 128
C语言,二叉树中的非递归的先序遍历
5星 · 资源好评率100%
二叉树前序遍历非递归的C语言代码如下:
```c
void preorder_traverse(struct Node *root) {
struct Node *p = root;
struct Stack *s = create_stack();
while (p != NULL || !is_empty(s)) {
if (p != NULL) {
printf("%d ", p->data); // 访问根节点
push(s, p); // 将根节点压入栈中
p = p->left; // 遍历左子树
} else {
p = pop(s); // 弹出栈顶元素
p = p->right; // 遍历右子树
}
}
destroy_stack(s);
}
```
其中,struct Node是二叉树的节点结构体,包含数据域data和左右子树指针left、right。struct Stack是一个用于存储二叉树节点的栈,create_stack()、push()、pop()、is_empty()、destroy_stack()是对应的栈操作函数。
在上述代码中,我们使用一个指针p指向当前遍历到的节点,从根节点开始遍历,每遍历到一个节点,就将其压入栈中。每次从栈中弹出一个节点时,就遍历该节点的右子树。
需要注意的是,在这个算法中,我们需要使用一个辅助栈来存储遍历过程中的节点,因此它的时间复杂度是O(n),空间复杂度也是O(n)。
阅读全文