数据结构-树
树的定义
非空树的特点
1.根节点没有前驱节点
2.叶子节点没有后继节点
3.有后继节点的叫分支节点
4.除了根节点外,任何节点都有且仅有一个前驱节点
结点的层次(深度)
从上往下数
节点的高度
从下往上数
树的高度(深度)
总共多少层
节点的度
有一个孩子(分支)
树的度
各节点的度的最大值
有序树
逻辑上看,树中节点的各子树从左至右是有次序的,不能互换
无序树
从左至右是无次序的,可以互换
森林是m(m>=0)棵互不相交的树的集合
树的性质
- 结点树 = 总度数 + 1
结点的度 – 结点有几个孩子(分支) - 度为m的树,m叉树的区别
树的度 – 各结点的度的最大值
m叉树 – 每个结点最多只能有m个孩子的树
度为m的树 | m叉树 |
---|---|
任意结点的度<=m(最多m个孩子) | 任意结点的度<=m(最多m个孩子) |
至少有一个结点度 = m (有m个孩子) | $允许所有结点的度都<m |
一定是非空树,至少有m+1个结点 | 可以是空树 |
- 度为m的树第 i 层至多有mi-1个结点(i >= 1)
- 高度为h的m叉树至少有 ** (mh-1)/(m-1) **
- 高度为h的m叉树至少有h个结点,高度为h、度为m的树至少有h+m-1个结点
- 具有n个结点的m叉树的最小高度为 log m ( n ( m − 1 ) + 1 ) \log_m(n(m-1)+1) logm(n(m−1)+1)
二叉树
二叉树的基本概念
二叉树是n(n>=0)个结点的有限集合:
- 或者为空二叉树,即n=0
- 或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。
特点: - 每个结点至多只有两棵子树
- 左右子树不能颠倒(二叉树又是有序树)
二叉树的常考性质
- 设非空二叉树中度为0、1和2的结点个数分别为n0,n1,n2,则n0=n2+1(叶子结点比二分支结点多一个)
- 二叉树第 i 层至多有2^i -1^个结点(i>=1)
m叉树第 i 层至多有m^i -1^个结点 - 高度为h的二叉树至多有2h-1个结点
高度为h的m叉树至多有(mh-1)/(m-1)个结点
几个特殊的二叉树
满二叉树
一棵高度为h,且含有2h-1个结点的二叉树
特点:
- 只有最后一层又叶子结点
- 不存在度为1的结点
- 按层序从1开始编号,结点 i 的左孩子为2i ,右孩子为2i +1 ;结点 i 的父节点为[i/2](如果有的话)
完全二叉树
当且仅当其每个结点都与高度为h的满二叉树中的编号为1~n的结点一一对应时,称为完全二叉树
特点:
- 只有可能在最后两层出现叶子结点
- 最多只有一个度为1的结点
- 同上3
- i <= [n/2]为分支结点,i > [n/2]为叶子结点
完全二叉树的常考性质
- 具有n个(n>0)结点的完全二叉树的高度h为 log 2 ( n + 1 ) 或 log 2 n + 1 \log_2(n+1) \text 或\log_2n +1 log2(n+1)或log2n+1
- 对于完全二叉树,可以由结点数n推出0、1和2的结点个数为n0、n1和n2
若完全二叉树有2k个(偶数)结点,则必有n1=1,n0=k,n2=k-1
若完全二叉树有2k-1个(奇数)结点,则必有n1=0,n0=k,n2=k-1
二叉排序树
左子树上所有结点的关键字均小于根结点的关键字;
右子树上所有结点的关键字均大于根结点的关键字。
左子树和右子树又各是一棵二叉排序树
平衡二叉树
树上任一结点的左子树和右子树的深度之差不超过1