C语言/C++编程数据结构与算法学习,二叉搜索树查找

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第1张图片

很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

在二叉树遍历一文中主要介绍了二叉搜索树的遍历,本文将继续介绍二叉搜索树的查找

二搜索叉树的查找主要涉及到查找指定的元素节点、最大最小查找,查找指定节点的前驱节点或者后继节点。下面分别介绍。

查找指定元素

二搜索叉树查找一个给定值key的过程与二分查找类似,其过程为:首先是关键字key与树根的关键字进行比较,如果key大比根的关键字大,则在根的右子树中查找,否则在根的左子树中查找,重复此过程,直到找到遇到空结点为止,如下图就是查找key为2节点过程。

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第2张图片

根据查找过程,下面给出了递归和非递归的代码实现如下:

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第3张图片
C语言/C++编程数据结构与算法学习,二叉搜索树查找_第4张图片

查找最大值最小值

根据二叉搜索树的性质,很容易想到:一颗非空的二叉搜索树查找其最大值流程很简单:只需要从根节点递归的遍历到右子树节点即可。当遍历到节点的右孩子为NULL时,则这个节点就是树的最大值,如下图所示。

同理,查找其最小值流程类似:从根节点递归的遍历到左子树节点即可。当遍历到节点的左孩子为NULL时,则这个节点就是树的最小值。

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第5张图片

下面给出了查找最大值的代码实现,最小值类似,大家可以自己试着实现最小值查找。

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第6张图片

查找前驱和后继节点

这里说的一个节点的前驱节点和后继节点指的是中序遍历顺序下某个节点的前驱和后继;更为详细的说就是:对于二叉搜索树,某一结点x的前驱就是小于key[x]的所有关键字中最大的那个结点,后继即是大于key[x]中的所有关键字中最小的那个结点。

查找前驱步骤:

(1)先判断节点x是否有左子树,如果有左子树则其左子树的最大节点即是x的前驱;

(2)如果没有左子树,但是该节点是其父节点的右孩子,那么父节点就是该节点的前驱结点;

(3)如果没有左子树,但是该节点是其父节点的左孩子,那么需要沿着其父亲节点一直向树的顶端寻找,直到找到一个节点P,P节点是其父节点Q的右边孩子,那么Q就是该节点的前驱节点。

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第7张图片

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第8张图片

查找后继节点的步骤:

(1)先判断节点x是否有子树,如果右子树则其右子树的最小节点即是x的前驱;

(2)如果没有右子树,但是该节点是其父节点的左孩子,那么父节点就是该节点的后继结点;

(3)如果没有右子树,但是该节点是其父节点的右孩子,那么需要沿着其父亲节点一直向树的顶端寻找,直到找到一个节点P,P节点是其父节点Q的左边孩子,那么Q就是该节点的后继节点。

对于第三种情况,可能光看文字还是有点抽象,还是用图来示范吧,例如下图查找结点13的后继结点15的过程:

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第9张图片

下面给出了前驱节点查找的代码实现,后继节点类似,大家可以自己试着实现后继节点查找代码。

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第10张图片

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

为您提供通俗易懂的技术文章,让技术变的更简单!

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

C语言/C++编程数据结构与算法学习,二叉搜索树查找_第11张图片
C语言/C++编程数据结构与算法学习,二叉搜索树查找_第12张图片
C语言/C++编程数据结构与算法学习,二叉搜索树查找_第13张图片
C语言/C++编程数据结构与算法学习,二叉搜索树查找_第14张图片

你可能感兴趣的:(C语言/C++编程数据结构与算法学习,二叉搜索树查找)