先序遍历建立二叉树,c语言代码
时间: 2024-09-09 21:02:31 浏览: 52
C语言,二叉树中的非递归的先序遍历
5星 · 资源好评率100%
先序遍历建立二叉树是一种利用先序遍历的方式递归地创建二叉树的算法。在这个过程中,我们首先访问根节点,然后是左子树,最后是右子树。在C语言中,我们通常会定义一个二叉树节点的结构体,然后通过递归函数来根据先序遍历的顺序构建这棵树。
以下是一个简单的C语言代码示例,演示如何使用先序遍历的方式建立二叉树:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点的结构体
typedef struct TreeNode {
char data; // 假设树中存储的是字符类型数据
struct TreeNode *left; // 左子树指针
struct TreeNode *right; // 右子树指针
} TreeNode;
// 函数声明
TreeNode* createTree();
// 主函数
int main() {
TreeNode* root = createTree();
// 这里可以添加代码来验证树的建立是否成功,例如进行先序遍历打印节点等
// ...
// 释放分配的内存(注意:这里没有实现释放内存的代码,实际使用时应该递归释放所有节点的内存)
// ...
return 0;
}
// 递归创建二叉树的函数
TreeNode* createTree() {
char ch;
scanf(" %c", &ch); // 读取一个字符,注意在%c前面有一个空格,用来忽略空白字符
// 建立一个新节点
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
if (!node) {
printf("内存分配失败。\n");
return NULL;
}
node->data = ch; // 将读取的字符赋值给节点数据域
if (ch == '#') { // 如果读取的是结束标记,则返回NULL
node->left = node->right = NULL;
} else {
node->left = createTree(); // 递归创建左子树
node->right = createTree(); // 递归创建右子树
}
return node;
}
```
这段代码中,我们使用`createTree`函数递归地构建二叉树。它读取一个字符,并根据该字符是否为结束标记`#`来决定是否创建子树。如果是`#`,则对应的左子树或右子树为空。如果不是`#`,则继续读取左右子树的数据并递归地建立子树。
请注意,这个代码示例假设用户输入的二叉树节点是单个字符,并且使用`#`字符来标记某个节点的子树为空。在实际使用中,你可能需要根据实际需求来调整代码,比如节点中存储的数据类型,以及如何结束输入等。
阅读全文