typedef struct { int num; char name[10]; char student[10];} Student;为结构体的二叉树
时间: 2024-01-05 07:03:46 浏览: 80
二叉树的结点应该包含一个指向该结构体的指针,以便于在二叉树中存储该结构体的实例。下面是一个简单的例子:
```
typedef struct Node {
Student *data; // 数据指针
struct Node *left; // 左子树指针
struct Node *right; // 右子树指针
} Node;
// 插入结点
void insertNode(Node **root, Student *data) {
if (*root == NULL) {
// 如果根节点为空,直接插入到根节点
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
*root = newNode;
} else {
// 如果不为空,递归插入到左子树或右子树
if (data->num < (*root)->data->num) {
insertNode(&((*root)->left), data);
} else {
insertNode(&((*root)->right), data);
}
}
}
// 中序遍历
void inorderTraversal(Node *root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d %s %s\n", root->data->num, root->data->name, root->data->student);
inorderTraversal(root->right);
}
}
// 测试代码
int main() {
Node *root = NULL;
Student s1 = {1, "Tom", "Math"};
Student s2 = {2, "Jerry", "English"};
Student s3 = {3, "Mike", "Computer Science"};
Student s4 = {4, "John", "History"};
insertNode(&root, &s1);
insertNode(&root, &s2);
insertNode(&root, &s3);
insertNode(&root, &s4);
inorderTraversal(root);
return 0;
}
```
这个例子中,我们定义了一个 `Node` 结构体,并且其中包含了一个指向 `Student` 结构体的指针,以及左右子树的指针。我们还定义了一个 `insertNode` 函数,用于将 `Student` 结构体插入到二叉树中。在插入时,我们首先判断根节点是否为空,如果为空,则直接将新结点插入到根节点;否则,我们就根据结点的 `num` 值(学号)递归地插入到左子树或右子树中。最后,我们定义了一个 `inorderTraversal` 函数,用于中序遍历整个二叉树,并输出每个结点的信息。在测试代码中,我们先定义了四个 `Student` 实例,然后分别将它们插入到二叉树中,并最终进行中序遍历。
阅读全文