用C++代码写一个二叉树的建立
时间: 2023-09-20 21:05:58 浏览: 94
### 回答1:
好的,这是一个二叉树的建立的 C 代码示例:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* createTree(int data, TreeNode *left, TreeNode *right) {
TreeNode *new_node = (TreeNode*) malloc(sizeof(TreeNode));
new_node->data = data;
new_node->left = left;
new_node->right = right;
return new_node;
}
int main() {
// 创建叶子节点
TreeNode *leaf1 = createTree(1, NULL, NULL);
TreeNode *leaf2 = createTree(2, NULL, NULL);
TreeNode *leaf3 = createTree(3, NULL, NULL);
TreeNode *leaf4 = createTree(4, NULL, NULL);
TreeNode *leaf5 = createTree(5, NULL, NULL);
TreeNode *leaf6 = createTree(6, NULL, NULL);
TreeNode *leaf7 = createTree(7, NULL, NULL);
// 创建二叉树
TreeNode *root = createTree(0,
createTree(1, leaf1, leaf2),
createTree(2,
createTree(3, leaf3, leaf4),
createTree(4, leaf5, leaf6)));
}
```
在这个代码中,我们定义了一个名为 `TreeNode` 的结构体,表示一个二叉树的节点。每个节点都有一个数据域和两个指针域,分别指向它的左儿子和右儿子。
我们还定义了一个名为 `createTree` 的函数,用于创建一个新的二叉树节点。在 `main` 函数中,我们创建了七个叶子节点,然后使用这些叶子节点和 `createTree` 函数创建了一棵二叉树。
这仅仅是一个简单的二叉树建立的例子,你可以根据自己的需要进行
### 回答2:
二叉树是一种常用的数据结构,在C语言中可以使用指针来表示和操作二叉树。以下是使用C代码来实现二叉树的建立的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建一个新的结点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入结点到二叉树中
Node* insertNode(Node* root, int data) {
if (root == NULL) {
return createNode(data);
} else {
if (data <= root->data) {
root->left = insertNode(root->left, data);
} else {
root->right = insertNode(root->right, data);
}
return root;
}
}
// 中序遍历二叉树(左-根-右)
void inOrderTraversal(Node* root) {
if (root == NULL) {
return;
}
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
int main() {
Node* root = NULL; // 根结点初始化为空
int n, data;
printf("请输入二叉树结点个数:");
scanf("%d", &n);
printf("请输入二叉树结点数据(以空格分隔):");
for (int i = 0; i < n; i++) {
scanf("%d", &data);
root = insertNode(root, data);
}
printf("中序遍历结果为:");
inOrderTraversal(root);
return 0;
}
```
以上代码首先定义了二叉树的结点结构,然后实现了创建新结点的函数`createNode`和插入结点的函数`insertNode`。通过使用递归的方法,根据新结点的数据大小将其插入到相应的位置。最后可以通过中序遍历`inOrderTraversal`来查看二叉树的构建结果。在`main`函数中,用户可以先输入二叉树结点的个数和数据,然后根据输入的数据构建二叉树,并输出中序遍历结果。
### 回答3:
建立二叉树的过程可以通过递归的方式来实现。下面是一个用C代码实现的二叉树建立的示例:
```C
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点结构
typedef struct TreeNode {
int data; // 结点数据
struct TreeNode* left; // 左子树指针
struct TreeNode* right; // 右子树指针
} TreeNode;
// 创建新结点的函数
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 递归建立二叉树的函数
TreeNode* buildTree() {
int data;
TreeNode* root = NULL;
printf("请输入结点的值(-1表示空结点):");
scanf("%d", &data);
if (data == -1) {
return NULL;
} else {
root = createNode(data);
printf("递归建立左子树\n");
root->left = buildTree();
printf("递归建立右子树\n");
root->right = buildTree();
}
return root;
}
// 打印二叉树的函数(中序遍历)
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
}
}
int main() {
TreeNode* root = NULL;
printf("通过递归建立一个二叉树\n");
root = buildTree();
printf("中序遍历二叉树结果:");
inorderTraversal(root);
printf("\n");
return 0;
}
```
以上代码中,首先定义了一个二叉树结点的结构体,包含数据和左右子树指针;然后定义了创建新结点的函数,用于分配内存空间并初始化结点;接着是递归建立二叉树的函数,通过用户输入的数据来创建二叉树,并递归建立左右子树。最后,通过中序遍历算法打印出二叉树的结果。
阅读全文