树的基础知识
作者:互联网
定义:n个结点构成的有限集合;
根结点:root,用r表示;其余结点可分为m个互不相交的子集,称为原来树的子树;
树的特点:
- 子树互不相交
- 除了根结点每个结点有且仅有一个父结点
- N个结点的树有N-1个边
非树:
基本术语:
- 结点的度(Degree):结点的子树个数
- 树的度:树中所有结点中最大的度数
- 叶结点(leaf):度为0的结点
- 父结点(Parent):有子树的结点是其子树的根结点的父结点
- 子结点(Child):和父结点相对应
- 兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点
- 路径和路径长度:从一个结点到另一个结点称为路径,包含的边数称为路径长度
- 祖先结点(Ancestor):从树根往上的每个结点都是其祖先结点
- 子孙结点(Descendant):某一结点子树中的所有结点都为其子孙结点
- 结点的层次(Level):根结点为第一层,往下加一
- 树的深度(Depth):书中所有结点最大层次为树的深度
树的表示:儿子兄弟表示法
二叉树
定义:一个有穷的结点集合,若不为空,由根结点和左子树TL、==右子树TR==两个不想交的二叉树组成。
二叉树的五种基本形态:
- 空树
- 只有一个结点
- 只有左子树
- 只有右子树
- 左右子树都有
二叉树的子树有左右之分
特殊二叉树:
- 斜二叉树:一边倒,形成链表
- 完美二叉树/满二叉树:除了最下一层每个结点都有两个子结点
- 完全二叉树:满二叉树最下一层从右边缺失一部分,左边是连续的
二叉树的重要性质:
- 第i层最大结点数2i-1
- 深度为k的二叉树总结点数2k-1
- n0:叶结点的个数,n2:度为2的结点个数;满足关系:n0= n2+1(可通过边的关系证明)
常用遍历方法:
- 先序:根,左子树,右子树
- 中序:左子树,根,右子树
- 后续:左子树,右子树,根
- 层次遍历:从上到下,从左到右
存储结构:
- 顺序存储:完全二叉树(父结点i/2,左子树根结点2i,右子树根结点2i+1),一般二叉树可留空位(造成空间浪费)
- 链表存储:两个指针分别指向左子树和右子树
递归遍历:先序中序后序遍历过程中经过的结点顺序一样,只是访问时机不同
- 先序遍历
- 中序遍历
- 后序遍历
中序遍历非递归遍历算法:使用堆栈,遇到结点就压栈,左子树遍历完出栈,然后遍历右子树
层序遍历:使用队列,遇到节点,节点出队列,左右子结点进队列
二叉搜索树
非空二叉搜索树性质:
- 非空左子树的键值小于根结点的键值
- 非空右子树的键值大于根结点的键值
- 左右子树都是二叉搜索树
删除结点:
- 若为叶结点直接删除
- 只有一个子结点,删除后父结点成为子结点的父结点
- 有两个子结点,用另一结点替代要删除的结点(右子树最小元素或者左子树最大元素,根据二叉树性质,这两个结点一定没有两个子结点)
平衡二叉树(AVL树)
平衡因子(Balance Factor):BF(T)=hL-hR (分别代表左右子树的高度)
平衡二叉树:非空树左右子树高度的绝对差不超过1(平衡因子的绝对值小于等于1)
h=O(log2n)
平衡二叉树的调整:平衡二叉树也是搜索树,插入结点时会破坏平衡,所以需要调整。
- RR旋转(右单旋)
- LL旋转(左单旋)
- LR旋转
- RL旋转
标签:左子,结点,遍历,右子,基础知识,子树,二叉树 来源: https://blog.csdn.net/weixin_44736530/article/details/123094282