用c语言建立一棵含有n个结点的二叉树,采用二叉链表存储
时间: 2024-05-08 15:20:39 浏览: 132
可以采用如下的结构体定义来表示二叉树的结点:
```c
typedef struct TreeNode {
int data; // 结点的数据域
struct TreeNode *left; // 指向左子树的指针
struct TreeNode *right; // 指向右子树的指针
} TreeNode;
```
其中,`data`表示结点的数据域,`left`和`right`分别是指向左子树和右子树的指针。
建立一棵二叉树可以采用递归的方式,具体过程如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新结点
TreeNode* createNode(int data) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 建立二叉树
TreeNode* createTree(int *arr, int n, int index) {
if (index >= n) {
return NULL;
}
TreeNode *root = createNode(arr[index]);
root->left = createTree(arr, n, 2*index+1);
root->right = createTree(arr, n, 2*index+2);
return root;
}
// 先序遍历二叉树
void preorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
int main() {
int n = 7;
int arr[] = {1, 2, 3, 4, 5, 6, 7};
TreeNode *root = createTree(arr, n, 0);
printf("先序遍历结果:");
preorderTraversal(root);
return 0;
}
```
上述代码中,`createNode`函数用于创建一个新的结点,`createTree`函数用于递归地建立二叉树,`preorderTraversal`函数用于先序遍历二叉树。在主函数中,先建立一个长度为7的数组作为二叉树的数据源,然后调用`createTree`函数建立二叉树,最后调用`preorderTraversal`函数进行先序遍历。
阅读全文