树(2)

元素之间存储一对多关系的数据结构,常用于表现族谱关系、组织关系等,也可以借助特殊的树型结构实现查找、排序等算法,一般使用倒悬树的方式表示。

树的相关术语

根结点:树的最上层元素,有且只能有一个。
子结点:该结点的对应下一层元素。
父结点:该结点的对应上一层元素。
叶子结点:没有子结点的元素,一般处于树的最底层。
兄弟结点:具有同一个父结点的元素,处在同一层。
高度:指的是树的层数。
密度:指的是树的结点数(包括根结点)。
:指的是结点的子结点数量。

普通树

子结点的数量没有限制。

顺序存储
1、每个结点一行
2、兄弟结点连续存储
3、兄弟结点连续存储

链式存储

			typedef struct Node
			{
				TYPE data;
				struct Node* brother;
				struct Node* child;
			}Node;

二叉树

子结点的数量最多为2。

相关术语
深度遍历/深度优先:
前序遍历:根,左,右
中序遍历:左,根,右
后序遍历:左,右,根
广度遍历/广度优先:
层序遍历:从上到下,先左后右

根据遍历顺序构建二叉树
前中:己知前序、中序构建二叉树。
{1,2,4,7,3,5,6,8}
{4,7,2,1,5,3,8,6}
后中:己知后序、中序构建二叉树。
{4,7,2,1,5,3,8,6}
{7,4,2,5,8,6,3,1}
层序:空位置用#表示(相当于一颗满二叉树),3,1,5,#,2,4,#。

普通二叉树
对二叉树的结没有位置及数量上的要求。

满二叉树
树的每一层的结点数量都是:2^(层数-1),即pow(2,层数-1)
只有放满或不放两种状态

根节点的第一个左子节点的下标,等于其下标 * 2+1
根节点的第一个右子节点的下标,等于其下标 * 2+2

完全二叉树
除了最后一层,其它每一层的结点数量都是:2^(层数-1)即pow(2,层数-1)
最后层的结点按照从左往右的顺序存储。

有序二叉树
所有的左子结点都小于根结点,所有右子结点都大于等于根结点。
注意:每次添加结点都要一层一层比
:中序遍历输出从小到大,右中左遍历输出从大到小

平衡二叉树
首先是有序的二叉树,树的左右子树的高度相差不超过1,并且子树的子树都满足这个要求。
(红黑树)(二分查找)

二叉树的顺序存储
注意公式:2^(h-1)

h=1        1 
h=2        2    3
h=3        4    5    6    7 
h=4        8    9   10

2^(h-1)等于第h行结点个数
2^(h-1)-1 等于当前第一个结点的下标。
第n个结点的公式为:2^(h-1)-1 + n - 1 => 2^(h-1) + n - 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值