用c语言建立一个二叉链表
时间: 2024-03-23 16:36:22 浏览: 72
可以按照以下步骤建立一个二叉链表:
1. 定义二叉树的结点结构体:
```c
struct TreeNode {
int data; // 结点数据
struct TreeNode *left; // 左子结点指针
struct TreeNode *right; // 右子结点指针
};
```
2. 定义二叉树的创建函数:
```c
struct TreeNode* createTree() {
int data;
scanf("%d", &data);
if (data == -1) { // -1 表示该结点为空
return NULL;
}
struct TreeNode *root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->data = data;
root->left = createTree();
root->right = createTree();
return root;
}
```
3. 调用创建函数创建二叉树:
```c
struct TreeNode *root = createTree();
```
这样就可以用 C 语言建立一个二叉链表了。
相关问题
用C语言建立二叉树的二叉链表
二叉树的二叉链表结构定义如下:
```c
typedef struct BiTNode{
int data; // 数据域
struct BiTNode *lchild, *rchild; // 左右子树指针
}BiTNode, *BiTree;
```
其中,`BiTNode` 表示二叉树结点,`BiTree` 表示二叉树指针。
接下来,我们可以通过递归的方式建立二叉树,具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
int data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void createBiTree(BiTree *T)
{
int ch;
scanf("%d", &ch);
if(ch == -1) // 输入 -1 表示该结点为空
*T = NULL;
else{
*T = (BiTree)malloc(sizeof(BiTNode));
if(!*T){
printf("Allocation failed!\n");
exit(-1);
}
(*T)->data = ch;
createBiTree(&((*T)->lchild)); // 递归建立左子树
createBiTree(&((*T)->rchild)); // 递归建立右子树
}
}
void preOrder(BiTree T)
{
if(T){
printf("%d ", T->data);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
int main()
{
BiTree T = NULL;
printf("Please input the binary tree in pre-order traversal sequence: ");
createBiTree(&T);
printf("The binary tree in pre-order traversal sequence is: ");
preOrder(T);
printf("\n");
return 0;
}
```
在上面的代码中,我们通过 `createBiTree()` 函数递归建立二叉树,当输入 `-1` 时表示该结点为空;`preOrder()` 函数用于先序遍历二叉树,输出二叉树的结点值。
用c语言建立二叉树的二叉链表存储结构。
好的,我可以回答你的问题。以下是用 C 语言建立二叉树的二叉链表存储结构的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点的结构体
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 定义一个函数,用于创建二叉树
struct TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) { // 如果输入 -1 表示该结点为空结点
return NULL;
}
struct TreeNode *node = (struct TreeNode*)malloc(sizeof(struct TreeNode)); // 申请新结点的内存空间
node->val = val;
node->left = createTree(); // 递归创建左子树
node->right = createTree(); // 递归创建右子树
return node;
}
// 定义一个函数,用于输出二叉树
void printTree(struct TreeNode *root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
printTree(root->left);
printTree(root->right);
}
int main() {
struct TreeNode *root = createTree(); // 创建二叉树的根结点
printf("二叉树的前序遍历结果为:");
printTree(root); // 输出二叉树的前序遍历结果
return 0;
}
```
以上代码实现了二叉树的创建和前序遍历操作。在代码中,我们使用了二叉树的二叉链表存储结构,即每个结点包含一个值,以及指向其左右子树的指针。在创建二叉树时,我们通过递归的方式创建左右子树,并返回根结点。在输出二叉树时,我们采用前序遍历的方式,先输出根结点的值,再递归输出左右子树的值。
阅读全文