给定一颗用2叉列表表示的二叉树其中指针t指向根节点试。写从根开始按先序遍历二叉树的算法,并且进行任意一颗三层二叉树的测试。用c语言写完整代码
时间: 2024-12-25 08:34:54 浏览: 1
在C语言中,我们可以使用递归的方式来实现二叉树的先序遍历。首先,我们需要定义一个结构体`Node`表示二叉树的节点,包含左孩子、右孩子以及数据值。然后,编写函数`preorderTraversal`进行先序遍历。
```c
#include <stdio.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 先序遍历函数 - 根 -> 左 -> 右
void preorderTraversal(Node* t) {
if (t == NULL)
return;
printf("%d ", t->data); // 访问当前节点
preorderTraversal(t->left); // 遍历左子树
preorderTraversal(t->right); // 遍历右子树
}
// 测试函数,构建并遍历一个三层二叉树
void testThreeLevelTree() {
Node* root = createThreeLevelTree(); // 创建三级二叉树
preorderTraversal(root);
printf("\n");
destroyTree(root); // 清理内存
}
// 示例:创建一个3层二叉树
Node* createThreeLevelTree() {
Node* root = malloc(sizeof(Node));
root->data = 1;
root->left = malloc(sizeof(Node));
root->left->data = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = malloc(sizeof(Node));
root->right->data = 3;
root->right->left = malloc(sizeof(Node));
root->right->left->data = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = malloc(sizeof(Node));
root->right->right->data = 5;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 添加更多节点... 这里仅示例了前三层
return root;
}
// 释放二叉树节点及其子节点
void destroyTree(Node* t) {
if (t == NULL)
return;
destroyTree(t->left);
destroyTree(t->right);
free(t);
}
int main() {
testThreeLevelTree();
return 0;
}
```
在这个代码片段中,`createThreeLevelTree`函数用于创建一个简单的三层二叉树,然后`main`函数调用`testThreeLevelTree`来进行遍历。运行此程序,你会看到先序遍历的结果。
阅读全文