二叉树与二叉搜索树

Posted 小鲸融创

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树与二叉搜索树相关的知识,希望对你有一定的参考价值。


从二叉树到二叉搜索树


二叉树由节点组成,其中每个节点包含一个“左”指针,一个“右”指针和一个数据元素。 “根”指针指向树中的最高节点。 左右指针递归地指向两侧的较小“子树”。 空指针表示没有元素的二叉树-空树。 正式的递归定义是: 二叉树不是空的(由空指针表示),还是由单个节点组成,其中左右指针(前面的递归定义)每个都指向二叉树。

二叉树与二叉搜索树


二叉搜索树”(BST)或“有序二叉树”是一种二叉树,其中节点按顺序排列:对于每个节点,其左子树中的所有元素都小于或等于该节点(< =),并且其右子树中的所有元素都大于节点(>)。上面显示的树是二叉搜索树-“根”节点为5,其左子树节点(1、3、4)<= 5,其右子树节点(6、9)> 5递归地,每个子树还必须服从二进制搜索树约束:在(1、3、4)子树中,3是根,1 <= 3和4> 3。


树底部边缘的节点具有空子树,称为“叶”节点(1、4、6),而其他节点为“内部”节点(3、5、9)。


基本上,二叉搜索树的插入和查找速度很快。下面将介绍这两种算法的代码。平均而言,二叉搜索树算法可以按lg(N)时间顺序(N对数2)在N个节点树中定位一个节点。因此,二叉搜索树适用于“字典”问题,在该问题中代码将插入并查找由某些键索引的信息。


对于每个问题,有两件事要理解...

  • 组成树的节点/指针结构以及对其进行操作的代码
  • 通常在树上进行迭代的算法


考虑二叉树问题时,通常最好画几棵小树来考虑各种情况。

C / C ++中的典型二叉树代码

作为介绍,我们将看一下两个最基本的二进制搜索树操作的代码——lookup()和insert()。此处的代码适用于C或C ++。

在C或C ++中,二进制树是用这样的节点类型构建的...


二叉树与二叉搜索树


1、lookup()方法

给定二叉搜索树和“目标”值,搜索树以查看其是否包含目标。lookup()代码的基本模式出现在许多递归树算法中:处理树为空的基本情况,处理当前节点,然后使用递归处理子树。如果树是二叉搜索树,则通常在节点上进行某种小于测试,以决定递归应该向左还是向右进行。


二叉树与二叉搜索树


2、Insert()方法

Insert()给定二叉搜索树和一个数字,将具有给定数字的新节点插入树中的正确位置。insert()代码与lookup()类似,但有一个复杂之处,就是它修改了树形结构。如上所述,insert()返回新的树指针以用于其调用者。在此树上以数字5调用insert()


二叉树与二叉搜索树


返回树


二叉树与二叉搜索树


此处显示的解决方案引入了一个newNode()帮助函数,该函数构建单个节点。基本案例/递归结构类似于lookup()中的结构-每个调用都检查NULL情况,查看当前节点,然后根据需要向下递归左或右子树。



二叉树的形状在很大程度上取决于节点插入的顺序。特别是,如果按递增顺序(1、2、3、4)插入节点,则树节点仅向右生长,从而导致链表形状,其中所有左指针均为NULL。如果以降序(4、3、2、1)插入节点,则会发生类似的情况。


本讲讲述了二叉树的基本特征与概念,同时引出了大名鼎鼎的非常有用的二叉搜索树,以及二叉搜索树的lookup和insert方法的实现思路及代码实现。



本文编辑来自:小鲸融创
如需转载,请后台私信小鲸


 关注小鲸融创,一起深度学习金融科技!

以上是关于二叉树与二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章

数据结构——树与二叉树的遍历

普通树与二叉树

B树与二叉树

3非线性结构--树与二叉树——数据结构基础篇

树森林与二叉树的相互转换

数据结构 树与二叉树的基本概念结构特点及性质