快速排序,可以以数组的形式实现,也可以用二叉树的形式实现,而我的这篇博文,正好

讲的是用二叉树的形式实现的。这种二叉树,又叫对分查找二叉树,在实际的应用中是不胜枚

举的。废话少说,代码贴上,算法比较简单,我也就不过多的浪费口舌。

#include <iostream> using namespace std; //定义节点结构 struct Node { //初始化节点值 Node() { left = NULL; right = NULL; } int value; Node* left; Node* right; }; void CreateBinary_Search_Tree(Node*&, int); //建立对分二叉树 void InsertNode(Node*, Node*); //遍历插入节点 void Inorder(Node*); //中序输出二叉树函数值 int Height(Node*); //求二叉树的深度 int getNodeNum(Node*); //求二叉树的节点个数 //main int main() { Node *root = NULL; int date; cout<<"请输入根节点值:"; cin>>date; //建立对分查找二叉树 while (date != -1) { CreateBinary_Search_Tree(root, date); cout<<"请输入子节点值:"; cin>>date; } //中序遍历输出二叉树结果 Inorder(root); cout<<endl; cout<<"对分查找二叉树的高度:"<<Height(root)<<endl; cout<<"对分查找二叉树的节点数:"<<getNodeNum(root)<<endl; return 0; } //建立对分查找二叉树 void CreateBinary_Search_Tree(Node*& root, int date) { //建立节点 Node *temp = new Node; temp->value = date; //为空树 if (root == NULL) { root = temp; return; } InsertNode(root, temp); } void InsertNode(Node* root, Node* temp) { if (temp->value < root->value) { if (root->left == NULL) { root->left = temp; } else { InsertNode(root->left, temp); } } else { if (root->right == NULL) { root->right = temp; } else { InsertNode(root->right, temp); } } } //中序遍历对分查找二叉树 void Inorder(Node* root) { if (root != NULL) { Inorder(root->left); cout<<root->value<<" "; Inorder(root->right); } } //求对分查找二叉树的深度 int Height(Node* root) { if (root == NULL) { return 0; } else { int height = 1 + max(Height(root->left), Height(root->right)); return height; } } //求对分查找二叉树的节点个数 int getNodeNum(Node* root) { if (root == NULL) { return 0; } else { int num = 1 + getNodeNum(root->left) + getNodeNum(root->right); return num; } }

好了,如果有问题,在下方给我留言就ok了。

转载于:https://www.cnblogs.com/JPAORM/archive/2011/03/20/2509898.html

算法不会,尚能饭否之对分查找二叉树(又为快速排序之二叉树实现)相关推荐

  1. 对分查找算法(迭代和递归方式)

    对分查找算法(迭代和递归方式) 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,失败返回-1. 迭代方式 public stati ...

  2. 算法-对分查找(二分查找)C++实现

    这个是个基本的查找算法,因为只是把数读入就需要(N)的时间量,因此我们在说这类问题的时候都是假设读入过的. 在算法常用的时间,将问题缩小为一部分(大约1/2),那么我们就认为这个算法是O(logn)级 ...

  3. 数据结构之对分查找算法

    一 .前提条件:对分查找的前提是待查找的数据必须是有序的 二.思想:对分查找是一种效率很高的查找方法,但被查找的数据必须是有序(例如非递减有序)的.对分查找首先将查找键与有序数组内处于中间位置的元素进 ...

  4. 数据结构 - 二叉树 - 面试中常见的二叉树算法题

    数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图 ...

  5. 数据结构与算法之美笔记——基础篇(中):树,二叉树,二叉查找树,平衡二叉查找树,红黑树,递归树,堆

    树: A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点.B.C.D 这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点.我们把没有父节点的节点叫作根节点,也就是图中的节点 E.我们 ...

  6. 《数据结构与算法》(十六)- “查找”详解

    目录 前言 1. 查找概论 2. 顺序表查找 2.1 顺序表查找算法 2.2 顺序表找优化 3. 有序表查找 3.1 折半查找 3.2 插值查找 3.3 斐波那契查找 4. 线性索引查找 4.1 稠密 ...

  7. 对分查找(二分查找、折半查找)

    即对于一个给定的数a,和整数b1,b2····bn,其中b1,b2····bn已经预先排序并在内存中,我们要返回当a=bi时的下标i,但是如果a不在数据之中的话就返回-1. 如果我们只针对于解题的话, ...

  8. 查找算法:斐波那契查找算法实现及分析

    斐波那契查找算法介绍 斐波那契查找法肯定与斐波那契相关嘛,斐波那契数列 又称黄金分割数列.所以我们先把黄金分割弄懂,后面代码才能看得懂!黄金分割点大家都知道吧.1:0.618或者1.618:1,我们的 ...

  9. 二分算法php,使用PHP实现二分查找算法代码分享

    第一种方法: [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. [优缺点]折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难.因 ...

最新文章

  1. (int),Int32.Parse() 和 Convert.toInt32() 的区别
  2. Excel访问局域网中OLAP方案
  3. 《抓住听众心理——演讲者要知道的100件事》一20.人们学习的最优长度是20分钟...
  4. android中实现返回首页功能
  5. 粤桂粤黔协作签约-丰收节交易会·李喜贵:谋定一县一园产业园
  6. verilog读写文件(整理)
  7. StringBuffer和StringBuilder使用方法比較
  8. Java反射(Reflection)
  9. 高频面试题2:单例设计模式
  10. 大学计算机专业全民,计算机专业大学排名实力顺序(上大学国内计算机专业大学哪个好值得报读)...
  11. ik分词和jieba分词哪个好_Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考...
  12. Linux下Keepalived 安装与配置 此博文包含图片
  13. alibaba 实体转json_JAVA中使用alibaba fastjson实现JSONObject、Object、Json字符串的转换...
  14. VPP 20.09版本正式发布
  15. asp.net970-宠物医院管理系统#毕业设计
  16. arcgispython空间插值_[学习总结]如何利用GIS建模批量处理气象数据-以micaps 第四类数据空间插值为例-专业气象研究-气象家园_气象人自己的家园...
  17. matlab 普通数值计算,数值计算方法(MATLAB版)
  18. maxscript rollout
  19. 通过youtube上传视频赚钱并免费宣传你的业务
  20. 从新手运气看幸存者偏差

热门文章

  1. [代码]--GridControl使用技巧总结,更新中...
  2. 票据的生命周期与人的灵魂
  3. 那年学过的web后端笔记
  4. linux shell中的case语句用法 以及 case default设置
  5. 量化策略回测BoolC
  6. 10个大数据领域的杰出公司
  7. 深化管理、提升IT的数据平台建设方案
  8. 历史数据导出excel_在数据产品中对导出功能的思考
  9. python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...
  10. java entrypoint_java – 有时只调用AuthenticationEntryPoint