是否完全二叉搜索树C语言怎么写
时间: 2024-11-22 11:36:53 浏览: 13
在C语言中,完全二叉搜索树(Complete Binary Search Tree, CBST)是一个每个节点的值大于其左子树中任意节点的值,并且小于其右子树中任意节点的值的二叉树。以下是一个简单的结构定义和插入操作的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 完全二叉搜索树结点的定义
typedef struct TreeNode {
int val; // 节点的整数值
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} TreeNode;
// 插入新节点到CBST的函数
TreeNode* insertIntoBST(TreeNode* root, int val) {
if (!root) { // 如果根为空,创建新节点
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
if (val < root->val) { // 如果值小于当前节点,递归左子树
root->left = insertIntoBST(root->left, val);
} else { // 如果值大于等于当前节点,递归右子树
root->right = insertIntoBST(root->right, val);
}
return root;
}
// 测试插入功能
int main() {
TreeNode* root = NULL;
root = insertIntoBST(root, 50);
insertIntoBST(root, 30);
insertIntoBST(root, 20);
insertIntoBST(root, 40);
insertIntoBST(root, 70);
insertIntoBST(root, 60);
// 打印整个CBST验证
inorderTraversal(root); // 自己实现的中序遍历函数,用于打印CBST
return 0;
}
// 中序遍历函数用于验证CBST性质
void inorderTraversal(TreeNode* node) {
if (node == NULL)
return;
inorderTraversal(node->left);
printf("%d ", node->val); // 输出节点值
inorderTraversal(node->right);
}
```
上述代码首先定义了一个二叉搜索树节点结构,然后实现了一个插入函数。在`main`函数中,我们创建了一个空树并插入一些测试值。最后,通过中序遍历验证是否为完全二叉搜索树。
阅读全文