概要

本章介绍伸展树。它和"二叉查找树"和"AVL树"一样,都是特殊的二叉树。在了解了"二叉查找树"和"AVL树"之后,学习伸展树是一件相当容易的事情。和以往一样,本文会先对伸展树的理论知识进行简单介绍,然后给出C语言的实现。后序再分别给出C++和Java版本的实现;这3种实现方式的原理都一样,选择其中之一进行了解即可。若文章有错误或不足的地方,希望您能不吝指出!

---------------------------------------------------------------------------------------------

特性要点:

1.如果寻找的key值小于tree->key值的话,则进行右旋:

1 Node N, *l, *r, *c;2

3 N.left = N.right =NULL;4 l = r = &N;5 if(key < tree->key)6 {7   if(key< tree->left->key)8 {9 c = tree ->left;10 tree->left = c->right;11 c->right =tree;12 tree =c;13 }14 r->left = tree; /*02, link right*/

15 r =tree;16 tree = tree->left;17 }

2.寻找的key值大于tree->key的话,则左旋,同理之;

3.如何简单的判断左旋还是右旋:

因为伸展树就是为了将寻找的key值对应的节点变为根节点,所以根据二叉树的特性:x节点包含关键字key,如果y是x的左子树的一个节点,则 key[y]<= key[x]。如果y是x的右子树的一个节点,则key[y] >= key[x]。那么如果key > tree->key ,则key就在tree的右子树的某个节点上,那么你就需要将右子树旋转直到根节点上。那么根据生活常识,你需要向左旋转才能将右子树旋转到根节点上。右旋同理之。

而所谓的左旋、右旋,则相当于;

左旋:将节点旋转为右孩子的左节点

右旋:将节点旋转为左孩子的右节点

伸展树算法c语言,数据结构伸展树介绍及C语言的实现方法相关推荐

  1. C语言数据结构之树超全详解

    目录 基础知识 二叉树的一些基本概念 树的性质 二叉树的一些基本性质 操作部分 二叉树的存储结构 1.顺序存储结构 2.链式存储结构 3.线索二叉树 前驱与后继 线索二叉树的存储表示 二叉树的遍历 先 ...

  2. 【C语言 - 数据结构】树、二叉树(上篇)

    树是计算机算法最重要的非线性结构.因为树能很好地描述结构的分支关系和层次特性,所以在计算机科学和计算机应用领域有着广泛的应用.这篇文章我就带大家一起了解一下树.二叉树这种结构,下篇文章会重点向大家介绍 ...

  3. 数据结构线段树介绍与笔试算法题-LeetCode 307. Range Sum Query - Mutable--Java解法

    此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解文章分类:LeetCode题解文章集合 LeetCode 所有题目总结:LeetCode 所有题目总结 线段树(Segme ...

  4. 【C语言 数据结构】树

    文章目录 树 一.树的概念 二.树的应用 1)树可表示具有分枝结构关系的对象 2)树是常用的数据组织形式 三.树的表示 四.树的基本术语 五.树的四种表示方法 5.1 双亲表示法 5.2 孩子表示法 ...

  5. c语言程序设计智慧树百度文库,C语言程序设计(原版)

    1.<C语言程序设计>课程建设分"两条线,五步走"."两条线"中一条线是教学平台,另一条线是教学模式与方法:"五步走"是指教学平 ...

  6. 双端堆c语言,数据结构——双端堆(C语言)

    定义 双端堆:是一棵完全二叉树,该完全二叉树要么为空,要么同时满足下列性质: (1) 根节点不包含元素: (2) 左子树是一个最小堆: (3) 右子树是一个最大堆: (4) 如果右子树不空,令i是左子 ...

  7. 编写一个C语言程序 实现自我介绍,用c语言编程实现,别出心裁的情侣拍照

    满意答案 /********************************************************************************************** ...

  8. c语言数据结构之队列

    前言 不同于栈,队列是一个先进先出的数据结构,规定数据节点从队列尾插入,从队列头取出,禁止对头尾两端以外的数据进行操作.队列可以分为顺序队列和循环队列. C语言数据结构之单链表 C语言数据结构之双向链 ...

  9. c语言入门自学免费app,C语言入门学习最新版下载-C语言入门学习app手机版v1.0.2 安卓版-腾飞网...

    C语言入门学习app手机版是一款c语言编程自学软件,零基础也可以学习,里面有海量教学视频,针对c语言不同程度的讲解都囊括其中.随时随地学习编程都可以,不用担心自己没有基础.还支持在手机上敲代码编程哦. ...

最新文章

  1. 如何通过参数来切换图表和数据
  2. web3.js(一)根据地址查询以太数量
  3. 机器学习——Java调用sklearn生成好的Logistic模型进行鸢尾花的预测
  4. ASP.NET实现用户在线检测的类源码[转收藏]
  5. tomcat 请求头错误 HTTP header parsing errors
  6. oracle查看列状态unused,Oracle9i下将列设为UNUSED时的系统行为
  7. Java学习之SpringBoot整合SSM Demo
  8. 大数据基础学习三:Ubuntu下安装VMware Tools超详细步骤及需要注意的问题(以ubuntu-18.04.3、Mware Workstation 15.1.0 Pro为例)
  9. clang 反汇编
  10. 【报告分享】2021年中国数字经济就业发展研究报告.pdf(附下载链接)
  11. jmeter下载图片
  12. Kettle构建Hadoop ETL实践(五):数据抽取
  13. WPF NotifyIcon使用
  14. 相机的介绍--新手入门级介绍
  15. MEGARAC(宝德)服务器BMC登录失败解决办法
  16. 黑客6种方法入侵你的计算机系统
  17. BoomBeach海水效果实现
  18. python 拓扑排序 dfs bfs_图遍历算法之DFS/BFS
  19. 员工离职率预测,练手赛
  20. 百度地图API——多点路径连线问题

热门文章

  1. 又见灵异事件,li中的span右浮动遇到的问题
  2. ERP_基于Oracle SOA的企业服务总线整合
  3. [PHP打野] 对pear-FSM的研究(一)基本了解
  4. 20 Very Useful Java Code Snippets
  5. 看张悟本神医现象有感
  6. arcgis9.2系列下载
  7. java可以用 lt =判断int吗_int 和 integer:装箱和拆箱的过程,会用到什么方法
  8. linuxmessage日志消失_某工的centos7 启动了rsyslog之后,日志/var/log/messages等都不产生日志了,都是空的。求大神解决!...
  9. @query 注解的定义_SpringDataJpa(5)---定义查询方法
  10. 免费云服务器无限流量,云服务器弄无限流量