树和二叉树: 树是非常重要的非线性结构。
存储的信息:例如计算机文件夹的管理,一般用用在组织管理(与省市县乡村的层次划分类似)。
结点(node):一个数据元素及其若干指向其子树的分支。
结点的度(degree) 、树的度:结点所拥有的子树的棵 数称为结点的度。树中结点度的最大值称为树的度。
树中的一些术语:叶子(left)结点、非叶子结点、孩子结点、双亲结点、兄弟结点、森林(forest)(若将一棵树的根结点删除,剩余的子树就构 成了森林)
树的表现形式除了常见的倒悬树之外还有如下所示形式。
二叉树:
性质1:第i层节点个数最多为2**(i-1)
性质2:深度为k的二叉树至多2**k-1个节点
性质3:树的度,节点的度,即是有几个分支,对于任何一颗二叉树,若叶子节点为n0,度为2的节点为n2,则n0=n2+1
二叉树的存储结构
(1)顺序存储结构
用一组地址连续的存储单元依次“自上而下、 自左至右”存储完全二叉树的数据元素
完全二叉树的存储如下:
非完全二叉树的存储如下:
非完全二叉树需要先补成完全二叉树,然后再存储到一维数组中。
(2)链式存储结构
二叉链表结点。有三个域:一个数据域,两个分别 指向左右子结点的指针域 – 三叉链表结点。除二叉链表的三个域外,再增加一 个指针域,用来指向结点的父结点。
二叉链表与三叉链表的不同点在于:二叉链表只能从一个节点找到他的孩子节点,因为他没有记录上一个节点的信息。
而三叉链表则可以回溯找到他的上一个节点,因为他记录了父节点的信息。
二叉树的链式存储形式:
二叉树的遍历
二叉树有三种遍历方式:
– DLR——先(根)序遍历。
– LDR——中(根)序遍历。
– LRD——后(根)序遍历。
练习:
对这棵树的先序遍历结果为:A B C, 中序遍历结果为:B A C , 后序遍历结果为: B C A
深度优先结果为:
先序遍历的结果为:A B C D E F G H K
中序遍历的结果为:B D C A E H G K F
后序遍历的结果为:D C B H K G F E A
广度优先结果为:
先序遍历:A B E C F D G H K