C语音用先根序列建造二叉树
时间: 2024-03-01 09:44:35 浏览: 18
二叉树是一种树形结构,每个节点最多有两个子节点。C语言可以使用先根序列来建造二叉树。
先根序列即为先访问根节点,再访问左子树,最后访问右子树的顺序。在建造二叉树时,可以按照先根序列逐个读入节点的值,然后按照先根序列的顺序将它们加入二叉树中。
具体的步骤如下:
1. 读入第一个节点的值,并创建一个二叉树根节点,将该值赋给根节点。
2. 判断下一个节点的值是否小于或等于根节点的值。如果是,则将该节点加入根节点的左子树中;否则将该节点加入根节点的右子树中。
3. 重复步骤2,直到读入所有的节点。
4. 完成建造,得到一棵二叉树。
下面是一段C语言代码示例,用于实现先根序列建造二叉树:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
struct TreeNode* createTree(int val) {
struct TreeNode* node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
struct TreeNode* insert(struct TreeNode* root, int val) {
if (root == NULL) {
return createTree(val);
}
if (val <= root->val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
struct TreeNode* buildTree(int* preorder, int preorderSize) {
struct TreeNode* root = NULL;
for (int i = 0; i < preorderSize; i++) {
root = insert(root, preorder[i]);
}
return root;
}
void printTree(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
printTree(root->left);
printTree(root->right);
}
int main() {
int preorder[] = {10, 5, 3, 2, 8, 7, 9, 15, 12, 20};
int preorderSize = sizeof(preorder) / sizeof(preorder[0]);
struct TreeNode* root = buildTree(preorder, preorderSize);
printf("先根序列建造的二叉树为:\n");
printTree(root);
printf("\n");
return 0;
}
```
在该示例中,我们定义了一个结构体`TreeNode`,用于表示二叉树中的节点。`createTree`函数用于创建一个新的节点,并将节点的值赋为参数`val`。`insert`函数用于向二叉树中插入一个新节点,插入过程是按照先根序列的顺序进行的。`buildTree`函数用于建造一棵新的二叉树,它依次读入每个节点的值,并将它们插入到二叉树中。`printTree`函数用于按照先根序列的顺序打印二叉树中的所有节点。
在`main`函数中,我们定义了一个先根序列,并调用`buildTree`函数建造一棵新的二叉树。最后使用`printTree`函数打印这棵二叉树的先根序列。