文章目录

  • 本文二叉树排序实现的功能
  • 二叉排序树的定义
  • 二叉排序树样例图解
  • c语言代码

本文二叉树排序实现的功能

输入一串数字,输出从小到大的排序。

二叉排序树的定义

二叉排序树要么是空二叉树,要么具有如下特点:

  1. 二叉排序树中,如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;
  2. 二叉排序树中,如果其根结点有右子树,那么右子树上所有结点的值都大小根结点的值;
  3. 二叉排序树的左右子树也要求都是二叉排序树;
  4. 中序遍历二叉排序树,则是从小到大排序
    下面就是一颗二叉排序树:

二叉排序树样例图解

以4,5,7,2,3为例:

c语言代码

#include <stdio.h>
#include <stdlib.h>
typedef struct BSTNode  //定义节点
{int data;BSTNode *lchild;  //左孩子BSTNode *rchild;  //右孩子
}BSTNode, *BSTree;bool Search(BSTree bst, int key, BSTree f, BSTree *p)  //查找成功时,p指向值为key的节点。如果查找失败,则p指向遍历的最后一个节点
{if (!bst){*p = f;return false;}if (bst->data == key)  //查找成功,直接返回{*p = bst;return true;}else if (bst->data < key){return Search(bst->rchild, key, bst, p);}return Search(bst->lchild, key, bst, p);
}void InOderTraverse(BSTree bst)   //中序递归遍历二叉树
{if (NULL != bst){InOderTraverse(bst->lchild);printf("%d ", bst->data);InOderTraverse(bst->rchild);}
}static BSTNode* BuyNode(int data)   //生成一个节点并进行初始化
{BSTNode *pTmp = (BSTNode*)malloc(sizeof(BSTNode));if (NULL == pTmp){exit(0);}pTmp->data = data;pTmp->lchild = NULL;pTmp->rchild = NULL;return pTmp;
}bool Insert(BSTree *bst, int key)
{if (NULL == *bst)  //空树{*bst = BuyNode(key);   //插入根节点return true;}BSTNode *p;//先在二叉排序树中查找要插入的值是否已经存在if (!Search(*bst, key, NULL, &p))  //如果查找失败,则插入;此时p指向遍历的最后一个节点{BSTNode *pNew = BuyNode(key);if (key < p->data)  //将s作为p的左孩子{p->lchild = pNew;}else if (key > p->data)  //将s作为p的右孩子{p->rchild = pNew;}return true;  //插入成功}else{printf("\nThe node(%d) already exists.\n", key);//存在 }return false;
}int main(void)
{BSTNode *root = NULL;int num,i,a;printf("请输入排序的个数:");scanf("%d",&num);printf("请输入排序数:");for(i=0;i<num;i++){scanf("%d",&a);Insert(&root, a);} printf("排序后的序列:");InOderTraverse(root);//中序输出 return 0;
}

二叉树排序——c语言实现相关推荐

  1. 顺序二叉树(堆)与链式二叉树的C语言实现

    文章目录 树的概念及结构 树的概念 树的相关概念 树的表示 树在实际中的运用 二叉树的概念及结构 二叉树的概念 现实中的二叉树 特殊的二叉树 二叉树的性质 二叉树的存储结构 二叉树的顺序结构及实现 二 ...

  2. c语言二叉树的遍历菜单系统,二叉树遍历C语言的实现

    广告 提供50多种云计算产品,包括云服务器和云. 创建一站式云产品试用服务,以帮助开发人员和企业以零门槛进入云环境. 上面的代码很简单,上面的图片很容易理解. 下一点是焦点: 二叉树的遍历分为前遍,中 ...

  3. PTA 基础编程题目集 7-27 冒泡法排序 C语言

    PTA 基础编程题目集 7-27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一 ...

  4. php二叉树 排列,PHP 如何实现用户二叉树排序需求

    用户二叉树排序需求 用户注册,输入以下注册信息: - 电子邮箱 - 密码 - 确认密码 - 推荐人ID(此ID可以在数据库中手动增加一个) 每注册进一个新用户,该用户就进入到排序中 排序规则 新增用户 ...

  5. arraylist从大到小排序_java基础算法之二叉树排序(递归)

    一.二叉树介绍 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.二叉树由各种节点组成,如下图所示: 每个节点都可以有左子节点,右子节点 每一个节点都有一个值 二叉树遍历: 二叉树的遍历分左序, ...

  6. 论文浅尝 - EMNLP2020 | 通过词重排序跨语言解析

    笔记整理 | 吴林娟,天津大学硕士 来源:EMNLP2020 链接:https://www.aclweb.org/anthology/2020.findings-emnlp.265.pdf 动机 依赖 ...

  7. C语言 数组排序 – 快速法排序 - C语言零基础入门教程

    目录 一.简介 二.数组快速法排序原理 三.数组快速法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...

  8. C语言 数组排序 – 插入法排序 - C语言零基础入门教程

    目录 一.简介 二.数组插入法排序原理 三.数组插入法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...

  9. C语言 数组排序 – 选择法排序 - C语言零基础入门教程

    目录 一.简介 二.数组选择法排序原理 三.数组选择法排序实战 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 经过前面的学习, ...

最新文章

  1. 万字长文综述目标检测领域,你要的都在这里
  2. mysql商品管理系统总结_Mysql管理总结
  3. python五十三:组合的方式完成授权
  4. 检测是否是手机访问接口
  5. 缓存redis的整合
  6. 【Flink-未解决】 FLink TaskManager with id is no longer reachable
  7. unity, trail renderer gone black on iOS
  8. 10.企业安全建设指南(金融行业安全架构与技术实践) --- 安全预算、总结与汇报
  9. 《OpenCV3编程入门》学习笔记九:直方图与匹配
  10. 雪亮工程视频监控应用系统解决方案
  11. IDEA Translation插件,有道智云(有道翻译)应用ID,密钥申请教程
  12. 特征选择和特征提取,及其分类
  13. Abp vNext swagger注释
  14. webm视频怎么转换成mp4?
  15. 台式机设成仅计算机,将台式机更改为笔记本,将笔记本电脑更改为台式机
  16. 信息系统项目管理师-3项目立项管理
  17. 钉钉考勤与企业系统对接
  18. np.meshgrid函数中的indexing参数问题
  19. TS OLT Internet业务和组播业务(multicast)配置指导
  20. 软件开发2:代码检视

热门文章

  1. Swift实现iOS录音与播放音频功能
  2. 【渝粤题库】国家开放大学2021春2202公共行政学题目
  3. c++ 单机版授权时间原理
  4. python一对一辅导教程:Computational Problems for Physics chapter 1-B Code Listings 1.7 - 1.11
  5. 解决ECharts两条条折线图数据一样时,拐点处数据重合(设置ECharts两条折线图拐点处数据一上一下)
  6. Mac墨刀怎么导出HTML,超实用教程,教你用墨刀做出小红书app原型
  7. 使用python做一个闹钟_用python做了个高级闹钟 欢迎借鉴
  8. CSS实现父元素半透明,子元素不透明的问题
  9. 变革加速,博睿数据赋能“中国智造”转型升级
  10. 努力六个月java能学会吗_业余自学公众号运营六个月经历总结