当前位置: 首页 > 科技观察

Java数据结构与算法树(BST)

时间:2023-03-13 05:05:31 科技观察

1.二叉搜索树的前言历史。二叉搜索树算法是由PFWindley、AndrewDonaldBooth、AndrewColin、ThomasN.Hibbard等几位研究人员独立发现的。该算法归功于ConwayBerners-Lee和DavidWheeler,他们在1960年使用它在磁带上存储标记数据。最早和流行的二叉搜索树算法之一是Hibbard算法。2.二叉搜索树数据结构二叉搜索树(BinarySearchTree),又称二叉搜索树。如果你看到OrderedBinarytree,SortedBinaryTree,它们都在谈论同一件事。如果任一节点的左子树不为空,则左子树上所有节点的值都小于其根节点的值;如果任一节点的右子树不为空,则右子树上所有节点的值都大于它的根节点的值;任意节点的左右子树也是二叉查找树;二叉搜索树在日常开发中有很多场景会用到,比如基于组合模式的规则引擎,就是一棵二叉搜索树。但是像这样开发中使用的二叉树场景都是基于配置生成的,所以组合节点更方便控制树的高度和平衡。这与JavaAPIHashMap中的红黑树不同,为了解决插入节点后保持树的平衡问题。因此,二叉搜索树也是一种没有做任何调整的基础数据结构。它可能以一定的概率退化为链表,即从时间复杂度大约为O(logn)到O(n)。关于二叉搜索树的平衡解,包括;AVL树、2-3树、红黑树等,付哥会在后续章节继续实现。3.二叉搜索树结构的实现二叉搜索树是整个树结构中最基本的树,也是树系统中最容易实现的数据结构。但是之所以在二叉搜索树的基础上使用其他的树结构,主要是因为数据结构的使用就是数据的存储和读取。那么为了提高吞吐效率,需要尽可能平衡元素的排序,对树进行一些列操作,所以会有不同的结构树实现。二叉搜索树的实现是最好的基础学习。了解了基本的数据结构后,更容易扩展和学习其他树结构。源码地址:https://github.com/fuzhengwei/java-algorithms本章源码:https://github.com/fuzhengwei/java-algorithms/tree/main/data-structures/src/main/java/堆栈1。分支定义公共整数值;公共节点父节点;公共节点离开;公共节点权;用于形成树的节点需要包括;值和关联的三角形结构,一个父节点和两个子节点。如果是AVL树,还需要树的高度,红黑树也需要着色标记。2.插入一个节点publicNodeinsert(inte){if(null==root){root=newNode(e,null,null,null);尺码++;返回根;}//索引要插入的元素的位置,也就是插入到Node的哪个父元素parent=root;节点搜索=根;while(search!=null&&search.value!=null){parent=search;如果(enewNode.value){parent.left=newNode;}else{parent.right=newNode;}大小++;returnnewNode;}插入元素时首先判断是否有树根,如果没有则为当前节点创建一个树根。如果当前树有树根,则对插入的元素和当前树进行节点遍历操作,找到可以插入元素的索引位置parent(挂在这个父节点下)。那就是搜索搜索的过程。最后是插入元素,通过为插入的值创建一个Node节点,绑定其父元素,并将新元素挂在索引到的父节点下。3.索引节点publicNodesearch(inte){Nodenode=root;while(node!=null&&node.value!=null&&node.value!=e){if(e