数据结构(十五)二叉树
来源:互联网 发布:淘宝运费险怎么退运费 编辑:程序博客网 时间:2024/06/01 07:48
二叉树的定义
二叉树:n个结点的有限集合,该集合或者为空集,,或者有一个根结点和两棵互不相交的,分别成为根结点和两棵互不相交的,分别称为根结点的左子树和右子树的二叉树组成.
二叉树特点:
每个结点最多有两颗子树。
左右子树有顺序,次序不能颠倒。
即使树中某结点只有一颗子树,也要区分它是左子树还是右子树。
特殊二叉树
1. 斜树 左斜树:所有结点都只有左子树
右斜树:所有结点都只有右斜树
2. 满二叉树 :所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。
3. 完全二叉树:对一颗具有n个结点的二叉树按层序编号,如果编号为i(1<i<n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同,则这棵树称为完全二叉树。
例:
二叉树的性质
1. 在二叉树的第i层层上至多有2^i-1 个结点
2. 深度为k的二叉树至多有2^k – 1 个结点
3. 对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2 + 1
4. 具有n个结点的完全二叉树的深度为[log2n] + 1
5. 如果对一颗有n个结点的完全二叉树(深度为[log2n] + 1)的结点按层序编号,对任一结点i有:
i = 1 根结点,无双亲
i > 1 双亲是结点[i / 2]
2i > n, 无左孩子 2i + 1 > n 结点i无右孩子
二叉树的存储结构
1. 完全二叉树的顺序存储
2. 二叉链表
二叉树的遍历:从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
遍历方法:
1. 前序遍历:若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,在前序遍历右子树。
2. 中序遍历:若二叉树为空,则空操作返回,否则从根结点开始(并不先访问根结点),中序遍历根结点的左子树,然后访问根结点,最后中序遍历右子树。
3. 后序遍历:若二叉树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点
4. 层序遍历:若二叉树为空,则空操作返回,否则从树的第一层,也就是根节点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
- 数据结构(十五)二叉树
- 大话数据结构十五:线索二叉树
- 数据结构 JAVA描述(十五) 动态查找表 二叉排序树 二叉平衡树
- 数据结构(十五) 线索二叉树讲解(带头节点中序加线索) 以及实现的完整代码
- (C语言)二叉树非递归后序(数据结构十五)
- 数据结构(二叉树)
- 数据结构(二叉树)
- 【数据结构与算法】十五 二叉树遍历 DFS 深度优先 递归算法
- 数据结构编程笔记十五:第六章 树和二叉树 树和二叉树的转换算法实现
- 数据结构---树(二叉树)
- 数据结构---二叉树(C#)
- 二叉树(数据结构1)
- 数据结构-二叉树(2)
- 数据结构-二叉树(1)
- 二叉树算法(数据结构)
- 数据结构---二叉树(1)
- 数据结构---二叉树(2)
- 数据结构---二叉树(3)
- 详细讲解自定义ViewGroup+Scroller+VelocityTracker做出Launcher滑动
- 11.5 模板模式
- combobox 多列显示
- NSString 的各种转换
- Thread类的解析和常识
- 数据结构(十五)二叉树
- Java开发思路小总结
- css3 transform-origin
- Dictionary遍历过程中删除字典中为空的元素
- bwa软件的使用
- screen clientY offset
- 关于使用Groovy插件化开发测试单个Groovy的文件
- java反射机制
- 消息中间件Kafka