提供一段创建二叉树的代码
时间: 2023-11-18 09:06:28 浏览: 18
好的,下面是一个简单的二叉树创建代码实现:
```
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* createTree() {
int val;
cin >> val;
if (val == -1) { // -1 表示该节点为空
return NULL;
}
TreeNode* root = new TreeNode(val);
root->left = createTree();
root->right = createTree();
return root;
}
int main() {
TreeNode* root = createTree();
return 0;
}
```
这段代码实现了一个递归的二叉树创建过程。通过输入整数值来创建二叉树,-1 表示该节点为空。每次创建一个节点时,递归调用 createTree() 函数,分别创建左右子树。最终返回根节点,即可得到一棵完整的二叉树。
相关问题
请写一段创建二叉树的代码
好的,我可以为您提供一个创建二叉树的示例代码,请参考:
```c++
#include <iostream>
#include <queue>
using namespace std;
struct Node {
int val;
Node* left;
Node* right;
Node(int x) : val(x), left(nullptr), right(nullptr) {}
};
void createTree(Node* root) {
int val;
cout << "Please enter the value of node (enter -1 to stop): ";
cin >> val;
if (val == -1) {
return;
}
root->val = val;
queue<Node*> que;
que.push(root);
while (!que.empty()) {
Node* cur = que.front();
que.pop();
int left_val, right_val;
cout << "Please enter the value of left child of " << cur->val << " (enter -1 if there is no left child): ";
cin >> left_val;
if (left_val != -1) {
Node* left_child = new Node(left_val);
cur->left = left_child;
que.push(left_child);
}
cout << "Please enter the value of right child of " << cur->val << " (enter -1 if there is no right child): ";
cin >> right_val;
if (right_val != -1) {
Node* right_child = new Node(right_val);
cur->right = right_child;
que.push(right_child);
}
}
}
int main() {
Node* root = new Node(-1);
createTree(root);
return 0;
}
```
这个程序先创建根节点,然后通过 BFS 遍历整个二叉树的每一个节点,根据用户输入的值逐层创建左右子节点。当用户输入 -1 时,停止创建。这个程序可以用于创建任意个数的二叉树。
请用c语言写一段创建二叉树的代码
以下是使用 C 语言创建二叉树的示例代码:
#include <stdio.h>
#include <stdlib.h>
//定义二叉树结点
typedef struct TreeNode{
int data; //结点数据
struct TreeNode *left; //指向左子树的指针
struct TreeNode *right; //指向右子树的指针
}TreeNode;
//将数据插入二叉树
TreeNode* insert(TreeNode *node, int data){
//如果树为空,直接创建新结点并返回
if(node == NULL){
node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
//如果要插入的数据小于结点数据,则插入到左子树
if(data < node->data){
node->left = insert(node->left, data);
}
//如果要插入的数据大于等于结点数据,则插入到右子树
else{
node->right = insert(node->right, data);
}
return node;
}
//中序遍历二叉树
void inorderTraversal(TreeNode *node){
if(node != NULL){
inorderTraversal(node->left);
printf("%d ", node->data);
inorderTraversal(node->right);
}
}
int main(){
//初始化二叉树为空
TreeNode *root = NULL;
//插入数据
root = insert(root, 5);
root = insert(root, 2);
root = insert(root, 8);
root = insert(root, 1);
root = insert(root, 3);
//中序遍历并输出数据
printf("Inorder Traversal: ");
inorderTraversal(root);
return 0;
}