思路
一个简单的二叉搜索树(Binary Search Tree, BST)的实现。下面是对代码逐步分析
头文件包含:
#include <stdio.h> :包含标准输入输出函数的声明。
#include <stdlib.h> :包含内存分配和释放函数的声明。
二叉树节点结构定义:
typedef struct TreeNode :定义了一个名为 TreeNode 的结构体,包含三个成员:
int data 用于存储数据,
struct TreeNode *left 和 struct TreeNode *right 分别指向左子节点和右子节点。
创建新节点函数:
TreeNode* createNode(int data) :这个函数接受一个整数 data 作为参数,分配一个新的 TreeNode 结构体内存,
并将 data 存储在 newNode->data 中,
同时将 left 和 right 指针初始化为 NULL 。
如果内存分配失败( newNode == NULL ),则打印错误信息并退出程序。
插入节点函数:
TreeNode* insertNode(TreeNode* root, int data) :这个函数接受一个二叉树的根节点 root 和一个整数 data 作为参数。如果 root 为 NULL (即树为空),则创建一个新节点并返回。如果 data 小于 root->data ,则递归地调用 insertNode 函数在左子树中插入 data ;如果 data 大于 root->data ,则递归地调用 insertNode 函数在右子树中插入 data 。这样确保了二叉搜索树的性质:左子树的所有节点的值小于根节点的值,右子树的所有节点的值大于根节点的值。
主函数:
int main() :在主函数中,首先将 root 初始化为 NULL 。然后通过调用 insertNode 函数插入一系列的整数(50, 30, 20, 40, 70, 60, 80)到二叉树中。这些调用会根据每个整数的大小,将其插入到树中的适当位置,从而构建一个二叉搜索树。
总结来说,这段代码定义了一个二叉搜索树的数据结构,并实现了插入节点的功能。通过递归的方式,确保了插入的节点按照二叉搜索树的规则(左子树小于根,右子树大于根)进行排列。
代码:
#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("Error! unable to create new node\n");
exit(0);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入节点到二叉树
TreeNode* insertNode(TreeNode* root, int data) {
// 如果树为空,返回一个新节点
if (root == NULL) {
return createNode(data);
}
// 否则,递归地插入节点
if (data < root->data) {
root->left = insertNode(root->left, data);
} else if (data > root->data) {
root->right = insertNode(root->right, data);
}
return root;
}
// 主函数
int main() {
TreeNode* root = NULL;
root = insertNode(root, 50);
insertNode(root, 30);
insertNode(root, 20);
insertNode(root, 40);
insertNode(root, 70);
insertNode(root, 60);
insertNode(root, 80);
return 0;
}