数据结构C语言二叉树的创建及非递归的前序与二种中序遍历
时间: 2023-12-18 21:04:58 浏览: 87
二叉树的创建可以通过动态内存分配来实现,具体步骤如下:
1. 定义二叉树结构体,包括数据域和左右子树指针。
2. 申请内存空间,将数据域和左右子树指针初始化为空。
3. 递归创建左右子树。
以下是C语言二叉树的创建代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) { // -1表示空节点
return NULL;
}
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = val;
node->left = createTree();
node->right = createTree();
return node;
}
```
非递归前序遍历二叉树的方法是使用栈来模拟递归过程,具体步骤如下:
1. 将根节点入栈。
2. 取出栈顶元素,访问该节点。
3. 如果该节点有右子树,将右子树入栈。
4. 如果该节点有左子树,将左子树入栈。
5. 重复步骤2-4,直到栈为空。
以下是C语言二叉树的非递归前序遍历代码示例:
```c
void preOrder(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;
}
}
}
```
非递归中序遍历二叉树的方法也是使用栈来模拟递归过程,具体步骤如下:
1. 将根节点入栈。
2. 如果当前节点有左子树,将左子树入栈。
3. 如果当前节点没有左子树,取出栈顶元素,访问该节点,如果该节点有右子树,将右子树入栈。
4. 重复步骤2-3,直到栈为空。
以下是C语言二叉树的非递归中序遍历代码示例:
```c
void inOrder(TreeNode *root) {
if (root == NULL) {
return;
}
TreeNode *stack[100];
int top = -1;
TreeNode *node = root;
while (node != NULL || top >= 0) {
while (node != NULL) {
stack[++top] = node;
node = node->left;
}
node = stack[top--];
printf("%d ", node->data);
node = node->right;
}
}
```
阅读全文
相关推荐















