树可以分为两大类:(1)有序树(2)无序树
无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
- 二叉树:每个节点最多含有两个子树的树称为二叉树
- 二叉搜索树:
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
- 平衡二叉树:
(1)可以是一棵空树
(2)左子树和右子树高度之差的绝对值不超过1(左右子树的高度差可以为0、1和 -1)
(3)左子树和右子树均为平衡二叉树
- 平衡二叉搜索树:AVL树
除了满足平衡二叉树的性质,还需要左右结点的数值满足二叉搜索树的性质
问:有了二叉搜索树为什么要还要提出平衡二叉搜索树?
原因:
在最好的情况下,二叉搜索树的查找效率比较高,是 O(logn),其访问性能近似于二分法;
但最差时候会是 O(n),比如插入的元素是有序的,生成的二叉搜索树就是一个链表,这种情况下,需要遍历全部元素才行。
平衡二叉树的提出就是为了保证树不至于出现二叉查找树的极端现象,尽量保证分支平衡,查找效率稳定在O(logn)。
————————————————红黑树就是平衡二叉树—————————————————
- 满二叉树:叶节点除外的所有节点均含有两个子树的树被称为满二叉树
- 完全二叉树:除最后一层外,所有层都是满节点,且最后一层缺右边连续节点的二叉树称为完全二叉树
- 哈夫曼树(最优二叉树):带权路径最短的二叉树称为哈夫曼树或最优二叉树
——————————分割线——————————————————————————
二叉树的节点的深度:从根节点到每一层的节点数目;
二叉树的树的深度:从根节点到叶子节点的最多节点数量;
二叉树的节点的高度:从叶子节点所在层到目标节点之间节点的数目;
二叉树的树的高度:从根节点到叶子节点的最少节点数量;
默认空树深度为0,高度为0
至于根节点深度 与 叶子节点的高度 仁者见仁智者见智吧 好像不同教材规定不一样...