利用栈,顺序存储二叉树的非递归前序遍历算法,c语言
时间: 2024-11-18 12:17:10 浏览: 0
在C语言中,利用栈实现二叉树的非递归前序遍历(Preorder Traversal),可以按照“根节点 - 左子树 - 右子树”的顺序访问树的结点。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的结点
TreeNode* newNode(int val) {
TreeNode *temp = (TreeNode*)malloc(sizeof(TreeNode));
temp->val = val;
temp->left = temp->right = NULL;
return temp;
}
// 非递归前序遍历函数
void preorderTraversal(TreeNode* root) {
if (root == NULL) return; // 如果树为空,则直接返回
// 先将当前节点压入栈中
Stack* stack = createStack(); // 假设我们有一个自定义的栈数据结构
push(stack, root);
while (!isEmpty(stack)) {
// 弹出栈顶元素并访问它
TreeNode* node = pop(stack);
printf("%d ", node->val); // 打印节点值
// 将右子节点和左子节点依次压入栈
if (node->right != NULL) push(stack, node->right);
if (node->left != NULL) push(stack, node->left);
}
destroyStack(stack); // 算法结束,释放栈内存
}
// 省略栈相关的辅助函数如创建、弹出、检查空等,因为这取决于你如何实现栈
int main() {
// 构建一个简单的二叉树示例
TreeNode* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
printf("Non-recursive Preorder Traversal of the tree: ");
preorderTraversal(root);
return 0;
}
```
阅读全文