C语言将二叉树的数据放入栈后一个个输出直到栈为空
时间: 2024-02-28 18:57:25 浏览: 14
下面是一个将二叉树的数据放入栈后一个个输出直到栈为空的 C 代码实现:
```c
void postOrderTraversal(BiTree T) {
Stack *stack = (Stack *)malloc(sizeof(Stack)); // 创建栈,存储二叉树节点
InitStack(stack); // 初始化栈
BiTree p = T; // 将根节点入栈
push(stack, p);
while (!isEmpty(stack)) {
if (p != NULL) {
push(stack, p->lchild); // 将p的左子节点入栈
p = p->lchild;
}
else {
p = pop(stack); // 弹出栈顶元素
if (!isEmpty(stack) && p->rchild == getTop(stack)) { // 如果p的右子节点未被访问
pop(stack); // 弹出右子节点
push(stack, p); // 将p入栈
p = p->rchild; // 将p指向右子节点
}
else {
printf("%c ", p->data); // 输出节点数据
p = NULL; // 将p置为NULL,避免重复访问
}
}
}
free(stack); // 释放栈空间
}
```
该代码实现了对二叉树的后序遍历,通过栈来存储待访问的节点。具体实现方法是将根节点入栈,然后进入循环,循环中每次弹出栈顶元素,如果该元素有左子节点,则将其左子节点入栈;如果没有左子节点,则将其右子节点入栈,直到找到一个没有左右子节点的节点,将其输出。在节点输出之后,将其置为 NULL,避免重复访问。最后检查栈是否为空,如果不为空则重复执行上述步骤,直到栈为空。