PS:本文为转载文章,原文可读性会更好。文末有原文链接。1.序列查询与加题2.二叉排序树2、1二叉排序树简介2、2二叉排序树的创建与遍历2、3二叉排序树的删除1、数列的查询与加法你有一个sequence{7,3,10,12,5,2,8},用什么方法实现,高效查询和数据添加?下面有3个选项供参考;方案一:使用数组(1)如果数组没有排序,直接添加到数组末尾,速度很快,但是查找速度很慢。(2)如果数组已经排好序,可以直接使用二分查找,这样查找会更快,但是为了保证数组有序,在添加新数据的时候,找到插入位置后,后面的数据需要整体移动,速度会发生变化。慢的。方案二:使用链表无论链表是否有序,查找速度都很慢,但是添加数据的速度会比数组快,而且不需要移动数据。方案三:使用二叉排序树既可以保证数据检索的速度,又可以保证数据插入、删除、修改的速度。2.二叉排序树2.1二叉排序树介绍对于二叉排序树的任意一个非叶子节点,要求其左子节点的值小于当前节点的值,而右子节点的值节点小于当前节点的值Large;注意:假设相同的值,节点可以被视为左孩子或右孩子。好吧,我们先画一个二叉排序树,这样会更好理解。二叉排序树如图1所示;看图,假设图1中节点5为当前节点,则左子节点的值右子节点的值小于当前节点的值,右子节点的值大于当前节点的值。2.2二叉排序树的创建与遍历创建一个序列数组={7,3,10,12,5,2,8}放入对应的二叉排序树中,使用后序遍历(后续遍历相关内容可见于Java版数据结构与算法(4)本文)二叉排序树。将序列数组={7,3,10,12,5,2,8}创建成二叉排序树的思路如下;(1)使用for循环遍历array数组,并使用数组元素作为节点的值创建Node节点。(2)数组的第一个元素作为一棵树的根节点root,root的左右子树一开始都是空的。(3)将数组的第二个元素及后续元素添加到以根节点为根的树中。(4)如果添加的元素小于当前节点的值,且当前节点的左子节点为空,则将添加的元素作为当前节点的左子节点。(5)如果加入的元素小于当前节点的值,且当前节点的左子节点不为空,则将当前节点的左子节点作为新的当前节点,然后转到步骤4)。(6)如果添加的元素大于等于当前节点的值,且当前节点的右子节点为空,则将添加的元素作为当前节点的右子节点。(7)如果加入的元素大于等于当前节点的值,且当前节点的右子节点不为空,则将当前节点的右子节点作为新的当前节点,然后转到步骤(4)。有了以上思路,数组={7,3,10,12,5,2,8}创建的二叉排序树如图2所示;图中我们将array={7,3,10,12,5,2,8}创建一个对应的二叉排序树并使用后序遍历,现用Java代码实现;(1)创建节点类Node:packagecom.xiaoer.binarysorttree;公共类节点{privateNodeleftNode;privateNoderightNode;privateintvalue;publicNode(intvalue){super();this.value=value;}publicNodegetLeftNode(){returnleftNode;}publicvoidsetLeftNode(NodeleftNode){this.leftNode=leftNode;}publicNodegetRightNode(){returnrightNode;}publicvoidsetRightNode(NoderightNode){this.rightNode=rightNode;}//添加节点方法publicvoidaddNode(Nodenode){if(node==null){System.out.println("节点为空,请勿添加");return;}//判断传入节点的值是否小于当前节点的值if(node.value
