算法不会,尚能饭否之对分查找二叉树(又为快速排序之二叉树实现)
快速排序,可以以数组的形式实现,也可以用二叉树的形式实现,而我的这篇博文,正好
讲的是用二叉树的形式实现的。这种二叉树,又叫对分查找二叉树,在实际的应用中是不胜枚
举的。废话少说,代码贴上,算法比较简单,我也就不过多的浪费口舌。
#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. 迭代方式 public stati ...
- 算法-对分查找(二分查找)C++实现
这个是个基本的查找算法,因为只是把数读入就需要(N)的时间量,因此我们在说这类问题的时候都是假设读入过的. 在算法常用的时间,将问题缩小为一部分(大约1/2),那么我们就认为这个算法是O(logn)级 ...
- 数据结构之对分查找算法
一 .前提条件:对分查找的前提是待查找的数据必须是有序的 二.思想:对分查找是一种效率很高的查找方法,但被查找的数据必须是有序(例如非递减有序)的.对分查找首先将查找键与有序数组内处于中间位置的元素进 ...
- 数据结构 - 二叉树 - 面试中常见的二叉树算法题
数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图 ...
- 数据结构与算法之美笔记——基础篇(中):树,二叉树,二叉查找树,平衡二叉查找树,红黑树,递归树,堆
树: A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点.B.C.D 这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点.我们把没有父节点的节点叫作根节点,也就是图中的节点 E.我们 ...
- 《数据结构与算法》(十六)- “查找”详解
目录 前言 1. 查找概论 2. 顺序表查找 2.1 顺序表查找算法 2.2 顺序表找优化 3. 有序表查找 3.1 折半查找 3.2 插值查找 3.3 斐波那契查找 4. 线性索引查找 4.1 稠密 ...
- 对分查找(二分查找、折半查找)
即对于一个给定的数a,和整数b1,b2····bn,其中b1,b2····bn已经预先排序并在内存中,我们要返回当a=bi时的下标i,但是如果a不在数据之中的话就返回-1. 如果我们只针对于解题的话, ...
- 查找算法:斐波那契查找算法实现及分析
斐波那契查找算法介绍 斐波那契查找法肯定与斐波那契相关嘛,斐波那契数列 又称黄金分割数列.所以我们先把黄金分割弄懂,后面代码才能看得懂!黄金分割点大家都知道吧.1:0.618或者1.618:1,我们的 ...
- 二分算法php,使用PHP实现二分查找算法代码分享
第一种方法: [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. [优缺点]折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难.因 ...
最新文章
- (int),Int32.Parse() 和 Convert.toInt32() 的区别
- Excel访问局域网中OLAP方案
- 《抓住听众心理——演讲者要知道的100件事》一20.人们学习的最优长度是20分钟...
- android中实现返回首页功能
- 粤桂粤黔协作签约-丰收节交易会·李喜贵:谋定一县一园产业园
- verilog读写文件(整理)
- StringBuffer和StringBuilder使用方法比較
- Java反射(Reflection)
- 高频面试题2:单例设计模式
- 大学计算机专业全民,计算机专业大学排名实力顺序(上大学国内计算机专业大学哪个好值得报读)...
- ik分词和jieba分词哪个好_Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考...
- Linux下Keepalived 安装与配置 此博文包含图片
- alibaba 实体转json_JAVA中使用alibaba fastjson实现JSONObject、Object、Json字符串的转换...
- VPP 20.09版本正式发布
- asp.net970-宠物医院管理系统#毕业设计
- arcgispython空间插值_[学习总结]如何利用GIS建模批量处理气象数据-以micaps 第四类数据空间插值为例-专业气象研究-气象家园_气象人自己的家园...
- matlab 普通数值计算,数值计算方法(MATLAB版)
- maxscript rollout
- 通过youtube上传视频赚钱并免费宣传你的业务
- 从新手运气看幸存者偏差
热门文章
- [代码]--GridControl使用技巧总结,更新中...
- 票据的生命周期与人的灵魂
- 那年学过的web后端笔记
- linux shell中的case语句用法 以及 case default设置
- 量化策略回测BoolC
- 10个大数据领域的杰出公司
- 深化管理、提升IT的数据平台建设方案
- 历史数据导出excel_在数据产品中对导出功能的思考
- python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...
- java entrypoint_java – 有时只调用AuthenticationEntryPoint