二叉树也是递归定义的,其结点有左右子树之分:
(2) 满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
(3) 深度——二叉树的层数,就是高度。
1、二叉树的存储结构
(1)顺序存储结构(适合完全二叉树和满二叉树)
(2)链式存储结构(适合非完全二叉树)
2、二叉树的遍历
(1)递归遍历(中序遍历、先序遍历、后序遍历)
(2)非递归遍历(利用堆栈实现)
3、二叉树的拓展
(1)线索二叉树(在节点空指针域存放前驱和后继节点的指针,加上线索标志域区分是线索指针还是child指针;建立线索二叉树,实质上就是遍历一颗二叉树,在相应的指针域进行操作)
(2)二叉排序树(了解生成过程)
(3)最优二叉树(哈夫曼树):对于一组有确定权值的叶子节点,构造的具有最小带权路径长度的二叉树(典型应用:哈夫曼编码)
(3)平衡树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。(防止退化为链表,提高搜索效率)
(4)红黑树:红黑树是平衡二叉树的一种;它有很好的性质,树中的结点都是有序的,而且因为它本身就是平衡的,所以查找也不会出现非常恶劣的情况,基于二叉树的操作的时间复杂度是O(log(N))。Linux内核在管理vm_area_struct时就是采用了红黑树来维护内存块的。
比较好的文章推荐: