用c语言写一个二叉排序树
时间: 2023-03-10 20:41:18 浏览: 106
好的,二叉排序树的实现可以用以下代码: struct Node
{
int key;
struct Node *left, *right;
};
// 创建新结点
struct Node *newNode(int item)
{
struct Node *temp = (struct Node *)malloc(sizeof(struct Node));
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
// 插入新结点
struct Node* insert(struct Node* node, int key)
{
/* 如果结点为空,返回新创建的结点 */
if (node == NULL) return newNode(key);
/* 否则,递归地找到要插入的位置 */
if (key < node->key)
node->left = insert(node->left, key);
else if (key > node->key)
node->right = insert(node->right, key);
/* 返回结点 */
return node;
}
相关问题
用c语言写如何构建二叉排序树
以下是用C语言实现构建二叉排序树的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *left;
struct Node *right;
};
struct Node* newNode(int data) {
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
struct Node* insert(struct Node* node, int data) {
if (node == NULL) {
return newNode(data);
} else if (data < node->data) {
node->left = insert(node->left, data);
} else if (data > node->data) {
node->right = insert(node->right, data);
}
return node;
}
void inorderTraversal(struct Node* node) {
if (node != NULL) {
inorderTraversal(node->left);
printf("%d ", node->data);
inorderTraversal(node->right);
}
}
int main() {
struct Node* root = NULL;
root = insert(root, 50);
insert(root, 30);
insert(root, 20);
insert(root, 40);
insert(root, 70);
insert(root, 60);
insert(root, 80);
printf("Inorder traversal of the BST: ");
inorderTraversal(root);
return 0;
}
```
在上述代码中,我们首先定义了一个 `Node` 结构体,包含了一个整数类型的数据成员 `data`,以及左右子节点的指针。然后,我们实现了一个 `newNode` 函数,用于创建一个新的节点,并返回该节点的指针。
接着,我们实现了一个 `insert` 函数,用于向二叉排序树中插入一个新的元素。在该函数中,我们首先判断当前节点是否为空,如果是,则创建一个新节点并返回;如果不是,则向左或右子树插入该元素。
最后,我们实现了一个 `inorderTraversal` 函数,用于中序遍历二叉排序树,并打印出遍历结果。在 `main` 函数中,我们首先创建了一个空的二叉排序树 `root`,然后向其中插入了一些元素,并调用 `inorderTraversal` 函数进行中序遍历。
用c语言构造一个二叉排序树
好的,以下是用 C 语言实现二叉排序树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void insert(TreeNode** root, int val) {
if (*root == NULL) {
*root = (TreeNode *)malloc(sizeof(TreeNode));
(*root)->val = val;
(*root)->left = NULL;
(*root)->right = NULL;
return;
}
if (val < (*root)->val) {
insert(&((*root)->left), val);
} else {
insert(&((*root)->right), val);
}
}
void inorder(TreeNode* root) {
if (root == NULL) {
return;
}
inorder(root->left);
printf("%d ", root->val);
inorder(root->right);
}
int main() {
TreeNode* root = NULL;
insert(&root, 5);
insert(&root, 3);
insert(&root, 7);
insert(&root, 1);
insert(&root, 9);
inorder(root);
return 0;
}
```
在这个代码中,我们定义了一个 `TreeNode` 结构体来表示一个树节点,其中包括值 `val` 和左右子节点 `left` 和 `right`。我们使用 `insert` 函数将一个值插入到树中,如果当前树为空,则直接创建一个节点;否则,如果值比当前根节点的值小,则在左子树中插入;否则,在右子树中插入。我们还定义了一个 `inorder` 函数来遍历二叉排序树,按中序遍历的方式输出所有节点的值。
在 `main` 函数中,我们创建了一个根节点,并依次向树中插入了 5、3、7、1 和 9 这五个数,然后通过 `inorder` 函数输出二叉排序树中所有节点的值。
阅读全文