建立一棵含有n个结点的二叉树,并采用二叉链表存储 C语言
时间: 2024-04-30 09:19:12 浏览: 89
二叉树的节点定义如下:
```c
typedef struct BiTNode {
int data; // 节点存储的数据
struct BiTNode* lchild; // 左子节点指针
struct BiTNode* rchild; // 右子节点指针
} BiTNode, *BiTree;
```
其中,`BiTNode` 是节点的结构体类型,`BiTree` 是指向节点的指针类型。
创建一棵含有 `n` 个节点的二叉树的函数如下:
```c
#include <stdlib.h>
// 创建一个节点
BiTree createNode(int data) {
BiTree node = (BiTree)malloc(sizeof(BiTNode));
node->data = data;
node->lchild = NULL;
node->rchild = NULL;
return node;
}
// 创建一棵含有n个节点的二叉树
BiTree createTree(int n) {
if (n < 1) return NULL; // 如果节点数量小于1,返回空指针
BiTree root = createNode(1); // 创建根节点
int i = 2;
BiTree queue[n]; // 使用队列存储待添加子节点的父节点
int front = 0, rear = 0;
queue[rear++] = root;
while (i <= n) {
BiTree parent = queue[front++];
parent->lchild = createNode(i++);
queue[rear++] = parent->lchild;
if (i <= n) {
parent->rchild = createNode(i++);
queue[rear++] = parent->rchild;
}
}
return root;
}
```
使用示例:
```c
#include <stdio.h>
int main() {
BiTree tree = createTree(7);
printf("二叉树的根节点值为:%d\n", tree->data);
printf("二叉树的左子节点值为:%d\n", tree->lchild->data);
printf("二叉树的右子节点值为:%d\n", tree->rchild->data);
printf("二叉树的左子节点的左子节点值为:%d\n", tree->lchild->lchild->data);
printf("二叉树的左子节点的右子节点值为:%d\n", tree->lchild->rchild->data);
printf("二叉树的右子节点的左子节点值为:%d\n", tree->rchild->lchild->data);
printf("二叉树的右子节点的右子节点值为:%d\n", tree->rchild->rchild->data);
return 0;
}
```
输出结果:
```
二叉树的根节点值为:1
二叉树的左子节点值为:2
二叉树的右子节点值为:3
二叉树的左子节点的左子节点值为:4
二叉树的左子节点的右子节点值为:5
二叉树的右子节点的左子节点值为:6
二叉树的右子节点的右子节点值为:7
```
阅读全文