数据结构基础——二叉树(一) 基本概念梳理

一、数组存储二叉树的简单介绍

1.数组元素:A B C D E F G H I J 

对应下标:0 1  2 3 4  5  6 7 8 9

堆结构:     A

             B          C

       D         E  F         G

2.父子间下标关系的计算公式:

①leftchild=parent*2+1

rightchild=parent*2+2

注意:左孩子始终为奇数,右孩子始终为偶数。

②parent=(child-1)/2

3.数组可存储full binary tree和complete binary tree.

注:只有complete binary tree 和full binary tree才适合使用数组存储,否则容易造成空间浪费。

二、二叉树的简单性质

1.对于非空树而言:度数为2的分支节点有n2个,度数为0的分支节点有n0个,则:n0=n2+1.

2.具有n个结点的满二叉树的深度:log2(n+1)。

【例题】求2n个结点的完全二叉树中叶子结点的个数。

【解】设度数为0,1,2的结点分别有N0,N1,N2个,则:

N0+N1+N2=2n

N2=N0-1

联立可得:2N0+N1=2n+1

利用完全二叉树的特点:完全二叉树中,度数为1的结点最多有1个。

因为2N0,2n都是偶数,所以必有N1=1.

故N0=n,即叶子结点有n个。

【例】A complete binary tree has 531 vertices. What's its height?

Solution:

For a complete binary tree, each leaf is of height H-1 or H,and a full binary tree of height 9 has 511vertices, a full binary tree of height 10 has 1023vertices.

Thus its height is 10.

【例】A complete binary tree has 767 vertices. What's the number of its leaves?

Solution: For a complete binary tree, N2=N0+1

 N1=0 or N1=1

N1+N2+N0=767.

Combine these three expressions, we can derive N0=384.

Thus the number of leaves is 384.

三、二叉树的具体实现

1.用数组可表示满二叉树、完全二叉树,依据父子结点下标的计算公式进行求解。

2.二叉链表:从一个结点可寻找其两个孩子结点。

3.三叉链表:从一个结点可寻找到其孩子结点与双亲结点。

四、多叉树的实现方式——孩子兄弟表示法

//存储多叉树的最佳表示法——孩子兄弟表示法
typedef int DataType;
struct TreeNode {
	struct TreeNode* firstChild;//第一个孩子结点
	struct TreeNode* pNextBrother;//指向下一个兄弟结点
	DataType data;
};

五、堆的基本概念

1.堆的性质:

①堆中某个结点的值总是不大于或不小于其父节点的值。

②堆总是一棵完全二叉树。

2.分类:大根堆(大堆)、小根堆(小堆)。

3.应用:堆排序、优先级队列等。

4.堆的物理结构可用数组实现,利用父子结点的下标关系式即可实现堆的相关操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大观居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值