随机化二叉搜索树的构造(算法导论)

本文介绍了如何使用数组实现二叉搜索树的构造,特别是针对算法导论中描述的节点插入方法进行了实践和改进。通过随机化数组顺序,构建出的二叉搜索树更加均匀,但会丢失原始输入顺序。文章强调了二叉搜索树在工程应用中的优势,如线性时间查询复杂度,并提供了代码实现。
摘要由CSDN通过智能技术生成

说实话,算法导论上讲的那个节点插入算法写得不太专业,虽然让人一看就感觉懂了,但正真实现起来才发现根本不是那回事(当然变换过程是一样的,但不像算法里写的那样用结构体来完成)。经过我自己一本不正经的摸索和大佬们的指点迷津,终于用数组实现了二叉搜索树的构造呵呵哈哈哈~

交换过程可以参考算法导论以及网易公开课算法导论。

  1. 算法描述
    不知何为二叉搜索的童鞋请先百科。对于数组A[ ],令A[1]为根节点,每输入一个A[ i ],首先与根节点比较,大于根节点则放在根节点右边,若根节点没有右子节点,则令A[ i ]为右子节点,否则与右子节点比较;若A[ i ] 小于根节点,根节点没有左子节点,则令A[ i ]为左子节点,否则与左子节点比较;。。。。以此类推最终得到二叉搜索树。
  2. 二叉搜索树的特点
    二叉搜索树不会丢失输入序列的原有顺序。在工程中不会丢失原有特征;
    二叉搜索树的比较过程和快排的过程本质没有任何区别,所以构建二叉搜索树的复杂度与快排复杂度相等。
    高度为n的二叉搜索树的查询复杂度为线性时间n,这也是二叉搜索树作为工程应用的基础。
  3. 随机化的构造是指在构造二叉树之前先打乱原有数组,随机化过程会得到更均匀的结果,但是会丢失原有的输入顺序

读本代码需要注意的地方

  1. 输入:一串用空格隔开,不知长度和大小的数字。结束输入:换行,CTRL+Z
    输出:1.打乱后后的序列 2.dfs建立的二叉搜索树所得到的中序遍历,应为顺序。
  2. 由于输入数据的数量未可知,所以借用了队列来帮助建立初始化数组KEY。

  3. 由于用到了数组传递,要求指针内存必须连续,所以所有的数组均以malloc函数申请空间内存。

  4. memset函数不是填值函数,fill函数才是填值函数,所以要将数组的元素初始化为某值的时候请用fill函数。
    7.算法随机过程只是模拟随机,并非正真随机,所以每一次重新调用相同的处理,结果都会相同

代码如下


                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值