用c语言写一个孩子兄弟表示法的代码
时间: 2024-05-16 19:13:29 浏览: 19
孩子兄弟表示法是一种二叉树的存储结构,它将每个节点的左孩子和右兄弟分别存储在两个指针中,以实现更高效的存储和遍历。以下是一个用C语言实现孩子兄弟表示法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 孩子兄弟表示法的结构体
typedef struct TreeNode {
int data;
struct TreeNode *leftChild;
struct TreeNode *rightSibling;
} TreeNode;
// 创建一个新节点
TreeNode *newNode(int data) {
TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode));
node->data = data;
node->leftChild = NULL;
node->rightSibling = NULL;
return node;
}
// 插入一个节点作为另一个节点的孩子
void insertChild(TreeNode *parent, TreeNode *child) {
if (parent == NULL || child == NULL) {
return;
}
if (parent->leftChild == NULL) {
parent->leftChild = child;
} else {
TreeNode *sibling = parent->leftChild;
while (sibling->rightSibling != NULL) {
sibling = sibling->rightSibling;
}
sibling->rightSibling = child;
}
}
// 先序遍历孩子兄弟树
void preOrder(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
preOrder(root->leftChild);
preOrder(root->rightSibling);
}
// 测试代码
int main() {
TreeNode *root = newNode(1);
TreeNode *node2 = newNode(2);
TreeNode *node3 = newNode(3);
TreeNode *node4 = newNode(4);
TreeNode *node5 = newNode(5);
TreeNode *node6 = newNode(6);
TreeNode *node7 = newNode(7);
insertChild(root, node2);
insertChild(root, node3);
insertChild(node2, node4);
insertChild(node2, node5);
insertChild(node3, node6);
insertChild(node6, node7);
printf("先序遍历结果:");
preOrder(root);
printf("\n");
return 0;
}
```
运行结果:
```
先序遍历结果:1 2 4 5 3 6 7
```