树
树,不是我们常见的长在土里的树木,而是计算机语言中的一种结构。
树是一种简单的非线性结构
- 父节点
- 树结构中,每一个节点只有一个前件,称为该节点的父节点;没有前件的节点只有一个,称为树的根节点,简称树的根
- 子节点和叶子节点
- 树结构中,每一个节点可以有多个后件,称为该节点的子节点。没有后件的节点称为叶子节点
- 度
- 树结构中,每一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度
- 深度
- 定义一棵树的根节点所在的层次为1,其他节点所在的层次等于它的父节点所在的层次加1。树的最大层次称为树的深度
- 子树
- 在树中,以某节点的一个子节点为根构成的树称为该节点的一棵子树
- 父节点
在树中,树中的节点数等于树中所有节点的度之和再加1
二叉树
1.特点
- 二叉树可以为空,空的二叉树没有节点,非空二叉树有且只有一个根节点
- 每个节点最多有两棵子树,即二叉树中不存在度大于2的节点
- 二叉树的子树有左右之分,其次序不能任意颠倒
2.性质
- 在二叉树的第k层上,最多有$ 2 ^{k-1}(k \geq 1)$个节点
- 深度为m的二叉树中,最多有$ 2 ^{m}-1$个节点
- 对任何一棵二叉树,度为0的节点(即叶节点)总是比度为2的节点多一个
- 具有n个节点的二叉树,其深度至少为$[log{2}n]+1$,其中$[log{2}n]$表示取$log_{2}n$的整数部分
- 具有n个节点的完全二叉树的深度为$[log_{2}n]+1$
3.满二叉树和完全二叉树
- 满二叉树
- 满二叉树是指除最后一层外,每一层上的所有节点都有两个子节点的二叉树
- 完全二叉树
- 完全二叉树是指除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干节点的二叉树
- 满二叉树一定是完全二叉树,完全二叉树一般不是满二叉树
- 完全二叉树特点
- 叶子节点只可能在最后两层出现
- 对于任一节点,若其右子树的深度为m,则该节点左子树的深度为m或为m+1
- 二叉树采用链式存储结构。用于存储二叉树中元素的存储节点由数据域和指针域两部分构成
- 二叉树的存储结构中每一个存储节点有两个指针域,因此,二叉树的链式存储结构也称为二叉链表。对于满二叉树与完全二叉树可以按层次进行顺序存储
二叉树的遍历
1.前序遍历
- 首先访问根节点,然后遍历左子树,最后遍历右子树;并且在遍历左子树和右子树时,仍然先访问根节点,然后遍历左子树,最后遍历右子树
2.中序遍历
- 首先遍历左子树,然后访问根节点,最后遍历右子树。并且在遍历左子树和右子树时,仍然首先遍历左子树,然后访问根节点,最后遍历右子树
3.后序遍历
- 首先遍历左子树,然后遍历右子树,最后访问根节点;并且在遍历左子树和右子树时,仍然首先遍历左子树,然后遍历右子树,最后访问根节点
- 如果已知一棵二叉树的前序遍历序列和中序遍历序列,可以唯一确定这棵二叉树;已知一棵二叉树的后序遍历序列和中序遍历序列,也可以唯一确定这棵二叉树。但是,已知一棵二叉树的前序列遍历序列和后序遍历序列,不能唯一确定这棵二叉树
本文作者:
艾瑞可erik
本文链接: https://erik.xyz/2020/02/01/tree-binary-tree/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://erik.xyz/2020/02/01/tree-binary-tree/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!