资料整理于:1、《啊哈!算法》、《大话数据结构》

2、http://www.cnblogs.com/cxiaojia/archive/2012/08/14/2637948.html

1、树的相关定义

(1)树:包含n(n>0)个节点的有穷集合,其中每个元素称为节点(node);有一个特定的节点被称为根节点或树根(root);除根节点之外的其余数据元素被分为m(m≥0)个互不相交的结合T1,T2,……Tm-1,而其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。

(2)节点的度:一个节点含有的子树的个数称为该节点的度;

(3)树的度:一棵树中,最大的节点的度称为树的度;

(4)叶节点或终端节点:度为零的节点称为叶节点;

(5)分支节点或非终端节点:度不为零的节点;

(6)父节点或双亲节点:若一个结点含有子节点,则这个节点称为其子节点的父节点;

(7)子节点或孩子节点:一个节点含有的子树的根节点称为该节点的子节点;

(8)兄弟节点:具有相同父节点的节点互称为兄弟节点;

(9)节点的祖先:从根到该节点所经分支上的所有节点;

(10)子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

(11)节点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;

(12)树的深度或高度:定义一棵树的根结点层次为1,其他节点的层次是其父结点层次加1。一棵树中所有结点的层次的最大值称为这棵树的深度。

(13)森林:由m(m>=0)棵互不相交的树的集合称为森林;

2、树的特点

(1)每个节点有零个或多个子节点。

(2)每个子节点只有一个父节点。

(3)没有父节点的节点称为根节点。

3、树的分类

根据形态可以分为以下两种:

(1)二叉树

  • 满二叉树
  • 完全二叉树
  • 斜树

(2)多叉树

还有其他根据应用特性而命名的树,比如线索二叉树、平衡二叉树、二叉排序树、多路查找树(2-3树、2-3-4树、B树、B+树等)、最小生成树等,本质是上述两种类型。

4、树的特点和性质

由于实际中二叉树用得最多,而且多叉树可以转化成二叉树,因此主要讲二叉树的性质。

性质1:在二叉树的第i层上,至多有2^(i-1)个节点。

性质2:深度为k的二叉树,至多有2^k-1个节点。

性质3:对任何的一颗二叉树,如果其终端节点数为n0,度为2的节点数为n2,则有n0=n2+1。

性质4:具有n个节点的完全二叉树的深度为 [ log2(n) ]+1([ x ]表示不大于x的最大整数)。

性质5:有n个节点的完全二叉树,从第一层到[ log2(n) ]+1层,每层从左到右编号,对任一节点i,如果i=1,则是二叉树的根;如果i>1,则 [ i / 2 ]是其父节点;如果2i>n,则i无左孩子,否则其左孩子是2i;如果2i+1>n,则节点无右孩子,否则右孩子是2i+1。

5、树的表示(存储结构)

由于实际中二叉树用得最多,而且多叉树可以转化成二叉树,因此主要讲二叉树的存储结构,即如何表示二叉树结构,和创建实际的二叉树。这里有几种表示方法:

(1)孩子兄弟表示法:每个节点设置两个指针,分别指向该节点的第一个孩子和此节点的兄弟。

typedef struct TreeNode
{int data;//other data informationstruct TreeNode *fisrtchild;struct TreeNode *BrotherNode;
}node;

(2)子节点表示法;

(3)父节点表示法;

6、树的操作与用途

(1)遍历二叉树,如前序、后序、中序遍历(并推导遍历结果);

(2)对树进行节点的删减和添加;

(3)运用于查找(平衡二叉树、多路查找树),排序((堆)排序等)等;

数据结构——树的理解路线(总)相关推荐

  1. [转]C#与数据结构--树论--平衡二叉树(AVL Tree)

    C#与数据结构--树论--平衡二叉树(AVL Tree) http://www.cnblogs.com/abatei/archive/2008/11/17/1335031.html 介绍 我们知道在二 ...

  2. 数据结构—树与二叉树

    总第119篇 前言 之前谈到的线性表.栈和队列都是一对一的数据结构,但是现实中也存在很多一对多的数据结构,这篇要写的就是一种一对多的数据结构---树.全文分为如下几部分: 树的一些基本概念 树的存储结 ...

  3. 数据结构——树状数组

    我们今天来讲一个应用比较广泛的数据结构--树状数组 它可以在O(nlogn)的复杂度下进行单点修改区间查询,下面我会分成三个模块对树状数组进行详细的解说,分别是树状数组基本操作.树状数组区间修改单点查 ...

  4. 剑指offer(C++)-JZ34:二叉树中和为某一值的路径(二)(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值 ...

  5. 剑指offer(C++)-JZ82:二叉树中和为某一值的路径(一)(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等 ...

  6. 【数据结构(C语言)】数据结构-树

    树 文章目录 树 一.基本概念 1.树的定义 2.树的节点 3.树的性质 4.基本操作 二.二叉树 1.二叉树的特点 2.特殊二叉树 3.性质 4.存储结构 (1)二叉链表 (2)三叉链表 5.线索化 ...

  7. 数据结构-树与二叉树-思维导图+小结

    数据结构-树与二叉树-思维导图 1 数据结构-第五章-树与二叉树-思维导图 2 思维导图-补充 3 小结 3.1 知识点小结 3.2 习题小结 1 数据结构-第五章-树与二叉树-思维导图   数据结构 ...

  8. 考研数据结构树——读书摘抄总结

    这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战 考研数据结构树--读书摘抄总结 树(Tree)是n(n≥0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称 ...

  9. python tree结构_Python入门篇-数据结构树(tree)篇

    Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...

最新文章

  1. 入行时间序列预测必读的4篇论文(附代码)
  2. shell脚本之变量的作用域
  3. OpenCV Laplace point/edge detection拉普拉斯点/边缘检测的实例(附完整代码)
  4. 4.4 使用STM32控制MC20进行GPS帧数据解析
  5. Python 把较长的一行代码分成多行的技巧
  6. C语言#define宏定义可能注意不到的地方
  7. Git的GUI工具sourcetree的使用
  8. LintCode 434. 岛屿的个数II(并查集)
  9. JMS学习八(ActiveMQ消息持久化)
  10. led linux定时闪烁心跳,Linux驱动——LED闪烁
  11. IPAD移动端交互原型通用设计方案、ipad元件库、移动元件库、元件列表、设计元件、交互示例、界面模板、设备模板、手势图标、社交界面、音乐、电商、视图控制器、指示器、指纹解锁、手势解锁、rp元件库
  12. 解决ubuntu中出现:dpkg: error processing package install-info
  13. Jupyter插件的使用
  14. Idea 工具在java文件中怎么避免 import .*包
  15. Shiro实现登录功能
  16. 苹果雪豹操作系统正式版_苹果发布WatchOS 6.1.2第三个测试版本,修复Bug、提升设备稳定性...
  17. Power query (Power BI)一步到位傻瓜式合并工作簿,史上最好用
  18. 互联网深处有趣网站——进阶篇
  19. html制作钢铁侠心脏,钢铁侠胸部的“心脏”并非特效,那是怎么放进身体的?...
  20. VS一个解决方案中有多个项目,如何快速选择启动项

热门文章

  1. javascript中数组的22种方法
  2. grunt之Gruntfile(1)
  3. 数据结构之顺序表(一)
  4. 米尔电子Zynq UltraScale MPSoC核心板资料介绍
  5. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询
  6. 网站的SEO以及它和站长工具的之间秘密
  7. Android 查看每个应用的最大可用内存
  8. tomcat jdbc SlowQueryReport的实现解读
  9. 第一个冲刺周期-第三天
  10. 2010软考软件设计师冲刺精选【专家压轴模拟•下】