请用c++写一个二叉树创建的函数
时间: 2023-06-05 07:06:01 浏览: 70
好的,以下是一个简单的二叉树创建函数的 C 代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 二叉树的创建函数
TreeNode* createTree() {
int data;
printf("请输入节点的值(输入-1代表空节点):");
scanf("%d", &data);
if (data == -1) {
return NULL;
}
TreeNode* node = (TreeNode*) malloc(sizeof(TreeNode));
node->data = data;
node->left = createTree();
node->right = createTree();
return node;
}
int main() {
TreeNode* root = createTree();
return 0;
}
```
以上代码会读取用户输入的二叉树节点的值,并根据输入值递归创建二叉树中的左右子树,最终返回根节点的指针。
相关问题
用c++写一个二叉树的层次遍历
以下是用 C++ 实现二叉树的层次遍历的代码示例:
```c++
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void levelOrder(TreeNode* root) {
if (!root) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int n = q.size();
for (int i = 0; i < n; i++) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
cout << endl;
}
}
int main() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
levelOrder(root);
return 0;
}
```
该程序首先定义了一个 `TreeNode` 结构体,表示二叉树的节点。`levelOrder` 函数接收二叉树的根节点作为参数,利用队列实现二叉树的层次遍历,并输出每一层的节点值。`main` 函数中创建了一个二叉树,并调用 `levelOrder` 函数进行层次遍历。
用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));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入结点
Node* insertNode(Node* node, int data) {
if (node == NULL) {
return createNode(data);
} else if (data <= node->data) {
node->left = insertNode(node->left, data);
} else {
node->right = insertNode(node->right, data);
}
return node;
}
// 查找结点
Node* search(Node* node, int data) {
if (node == NULL || node->data == data) {
return node;
} else if (data < node->data) {
return search(node->left, data);
} else {
return search(node->right, data);
}
}
// 主函数
int main() {
Node* root = NULL;
root = insertNode(root, 10);
root = insertNode(root, 6);
root = insertNode(root, 15);
root = insertNode(root, 3);
root = insertNode(root, 8);
root = insertNode(root, 12);
root = insertNode(root, 18);
Node* result = search(root, 8);
if (result == NULL) {
printf("Element not found\n");
} else {
printf("Element found: %d\n", result->data);
}
result = search(root, 20);
if (result == NULL) {
printf("Element not found\n");
} else {
printf("Element found: %d\n", result->data);
}
return 0;
}
```
在此实现中,我们首先定义了二叉树结点,然后创建了一个用于创建新结点的函数。接下来,我们实现了一个用于插入结点的函数,该函数根据数据值将结点插入到树的正确位置。最后,我们实现了一个用于查找结点的函数,该函数使用递归算法在树中查找目标结点。在主函数中,我们创建了一个简单的二叉树,并使用search函数在树中查找两个不同的数据值。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)