C语言实现:先序遍历二叉树的非递归算法
时间: 2023-11-20 18:04:55 浏览: 96
先序遍历二叉树的非递归算法可以使用栈来实现。
算法步骤如下:
1. 如果根节点为空,直接返回。
2. 创建一个栈,将根节点压入栈中。
3. 当栈不为空时,循环以下操作:
a. 弹出栈顶节点,访问该节点。
b. 如果该节点的右子树不为空,将右子树压入栈中。
c. 如果该节点的左子树不为空,将左子树压入栈中。
C语言实现代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void preOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
TreeNode* stack[100];
int top = -1;
stack[++top] = root;
while (top >= 0) {
TreeNode* node = stack[top--];
printf("%d ", node->data);
if (node->right != NULL) {
stack[++top] = node->right;
}
if (node->left != NULL) {
stack[++top] = node->left;
}
}
}
int main() {
TreeNode* node1 = (TreeNode*)malloc(sizeof(TreeNode));
TreeNode* node2 = (TreeNode*)malloc(sizeof(TreeNode));
TreeNode* node3 = (TreeNode*)malloc(sizeof(TreeNode));
TreeNode* node4 = (TreeNode*)malloc(sizeof(TreeNode));
TreeNode* node5 = (TreeNode*)malloc(sizeof(TreeNode));
node1->data = 1;
node2->data = 2;
node3->data = 3;
node4->data = 4;
node5->data = 5;
node1->left = node2;
node1->right = node3;
node2->left = node4;
node2->right = NULL;
node3->left = node5;
node3->right = NULL;
node4->left = NULL;
node4->right = NULL;
node5->left = NULL;
node5->right = NULL;
preOrderTraversal(node1);
free(node1);
free(node2);
free(node3);
free(node4);
free(node5);
return 0;
}
```
阅读全文