Java源码集合类TreeMap学习1——数据结构2

二叉树的定义

二叉树(Binary Tree)是另一种树型结构,它的特点是每个节点至多只有两颗子树(即二叉树中不存在度大于2的节点),并且,二叉树的子树有左右之分,其次数不能任意颠倒。如下图。


二叉树的性质

性质1 在二叉树的第i层上至多有2i-1个节点(i>=1)。

证明(归纳法):

1. i = 1时,显然节点数等于1。

2. 假定所有的j,1<=j<i,命题成立,即第j层上至多有2^j-1个节点。那么,可以证明j = i时命题也是成立。

3.有归纳法假设:第i-1层上至多有2^i-2个节点。由于二叉树的每个节点的度至多为2,故在第i层上的最大节点数为第i-2层上的最大节点数的2倍,即2*2^i-2=2^i-1。

性质2 深度为K的二叉树至多有2k-1个节点(k>=1)。

性质3 对任何一颗二叉树T,如果其终端节点数为n0,度为2的节点数为n2,则n0 = n2 + 1。

证明:

1. 设n1为二叉树T中度为1的节点数,则二叉树T总节点数为:n = n0 + n1 + n2。

2. 设二叉树T中所有分支个数为B,则n = B + 1。由于度为1的节点是有一个分支,度为的2的节点是有2个分支,所以有:B = n1 + 2n2。于是可得出:

n = n1 + 2n2 + 1。

3. 由:n = n0 + n1 + n2和n = n1 + 2n2 + 1得:n0 = n2 + 1。

满二叉树

一棵深度为k且有2- 1个节点的二叉树称为满二叉树。

完全二叉树

满二叉树共有n个节点,按照有顺序的二叉树从根节点开始编号为1到n进行编号,假如有一棵二叉树节点总数为N(N>=1 && N <= n)的按顺序从1开始编号到N,且1到N这个顺序号在1到n中是依次对应的,那么这棵树就是完全二叉树。如下图。


性质4 具有n个节点的完全二叉树的深度为:|log2^n| + 1。

证明:

假设深度为k,则根据性质2和完全二叉树的性质有:

2^(k-1) - 1 < n <= 2^(k) - 1 或 2^(k - 1) <= n < 2^k。

于是k - 1 <= log2^n < k,因为k是整数,所以 k = |log2^n| + 1。

性质5 如果对一棵有n个结点的完全二叉树(其深度为|log2^n| + 1)的结点按层次编号(从第1层到|log2^n| + 1层,每层从左到右),则对任意结点 i(1 <= i <= n),有

(1)如果 i = 1, 则结点i是二叉树的根,无双亲;如果 i > 1,则其双亲PARENT(i)是结点 | i / 2 |。

(2)如果 2i >= n,则结点i 无左孩子(结点i为叶子结点);否则其左孩子LCHILD(i)是结点2i。

(3)如果 2i + 1 > n,则结点 i 无右孩子;否则其右孩子RCHILD(i)是结点 2i + 1。

二叉树的存储结构

1.顺序存储结构,就是存储在一组数组中。

2.链式存储结构,分为:二叉链表和三叉链表。三叉链表中的结点至少包含3个域:数据域和左、右指针域。

二叉链表的结点结构包含:数据域和左、右指针域。

三叉链表的结点结构包含:数据域、双亲节点指针域和左、右指针域。如下图。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值