数据结构之二叉树
为什么用到树,因为它通常结合了另外两种数据结构的优点:一种是有序数组,另一种是链表。在树中查找数据项的速度和在有序数组中查找一样快,并且插入数据项和删除项的速度也和链表一样。
先关专题:
二叉搜索树(Binary Search Tree)
术语
1.节点的度:一个节点含有的子树的个数称为该节点的度;
2.树的度:一棵树中,最大的节点度称为树的度,例如二叉树每个节点的最大度数为2;
3.叶节点或终端节点:度为零的节点;
4.非终端节点或分支节点:度不为零的节点;
5.父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
6.孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
7.兄弟节点:具有相同父节点的节点互称为兄弟节点;
8.节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
9.深度:对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0;
10.高度:对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0;
11.堂兄弟节点:父节点在同一层的节点互为堂兄弟;
12.节点的祖先:从根到该节点所经分支上的所有节点;
13.子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
14.森林:由m(m>=0)棵互不相交的树的集合称为森林;
深度、高度概念在不同的教材中有不同的定义,主要看高度深度的初值为几,有的为0,有的为1。
初值为0:
- 节点的深度是根节点到这个节点所经历的边的个数
- 节点的高度是该节点到叶子节点的最长路径(边数)
- 树的高度等于根节点的高度
初值为1:
- 节点的深度是根节点到这个节点的最长路径上的节点数
- 节点的高度是该节点到最远叶子节点的最长路径上的节点数
满二叉树(完美二叉树 Perfect Binary Tree)
除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树
满二叉树
完全二叉树
最后一层要么是满的,要么是右边缺少连续若干节点。可以看出完全二叉树最后一层如果是满的,就是满二叉树。所以说,满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树
完全二叉树
完满二叉树(Full Binary Tree)
所有非叶子结点的度都是2。(只要你有孩子,你就必然是有两个孩子。)
完满二叉树
平衡二叉树
又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。
平衡二叉树