C语言 编写二叉搜索树

二叉搜索树的最大特点是由根节点进入后左节点的值均小于根节点的值,右边节点的值均大于根节点的值。
并且二叉搜索树还有重要的特点就是中序遍历的二叉搜索树会的得到一个严格升序的数组。
首先需要编写节点以及代表头节点树的结构体:
在这里插入图片描述
创建一个插入函数,首先将需要放入的值包装成可以放入的节点。假如进入的节点本身就为NULL节点的话,直接将放入值的节点放入根结点处。假如进入的根节点不为NULL的话与其中的值进行比较,比根值大就进入根的右侧,比根值小就进入根的左侧。同时假如下一个节点是NULL的话直接将需要插入的值插入,而假如不为NULL的话需要进入下一步的迭代。

在这里插入图片描述
通过一个数组来测试一下,将构成的树通过中序遍历打印一下,检测一下是不是严格的递增数列。
在这里插入图片描述
结果:在这里插入图片描述

参考:https://www.bilibili.com/video/BV1Qx411m7jE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用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 *root,int data) { if(root==NULL) { root=createNode(data); return root; } if(data<root->data) { root->left=insertNode(root->left,data); } else if(data>root->data) { root->right=insertNode(root->right,data); } return root; } void inorderTraversal(node *root) { if(root==NULL) { return; } inorderTraversal(root->left); printf("%d ",root->data); inorderTraversal(root->right); } void preorderTraversal(node *root) { if(root==NULL) { return; } printf("%d ",root->data); preorderTraversal(root->left); preorderTraversal(root->right); } void postorderTraversal(node *root) { if(root==NULL) { return; } postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ",root->data); } int main() { node *root=NULL; int n,data; printf("Enter the number of elements: "); scanf("%d",&n); printf("Enter the elements: "); for(int i=0;i<n;i++) { scanf("%d",&data); root=insertNode(root,data); } printf("Inorder Traversal: "); inorderTraversal(root); printf("\nPreorder Traversal: "); preorderTraversal(root); printf("\nPostorder Traversal: "); postorderTraversal(root); return 0; } ``` 该程序实现了以下操作: 1. 创建一个新的节点 2. 插入一个节点到二叉搜索树中 3. 中序遍历二叉搜索树 4. 先序遍历二叉搜索树 5. 后序遍历二叉搜索树 在主函数中,程序首先要求用户输入要插入的元素数量,然后读取这些元素并将它们插入到二叉搜索树中。最后,程序按照中序、先序和后序的顺序遍历二叉搜索树,并将遍历的结果输出到屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值