二叉树 是 一个 节点 的度最多是2 ,并且区分 左右子树的 特殊树。
二叉树 有一些特性,这些特性 是 写 二叉树顺序表的 重要依据,所以先介绍一下:
1.k层的二叉树,最多有 2 的 k次方 -1 个节点,如果 节点数达到最大值,称为 满二叉树。
2.第k层的二叉树,最多 有 2的 k-1 次方 个节点
3.度为0的节点叫做叶子节点 n0,度为2的节点 n2, no = n2+1
在介绍第4点 之前,先说明一个概念:.完全二叉树指的是 从 第一层 到 最后一层,从左 到 右,从1 开始 给节点 编号,中间不存在 中断的节点的 二叉树。
第4,5点 都是 关于 完全 二叉树的
4.一个节点数 为n的完全二叉树的 深度 k为 : k = log2N + 1(log以2为底的N +1,log2N向下取整)
5.一个节点数 为n的完全二叉树,对于任意节点i,
5.1如果 2*i > n则 节点i无左孩子,否则,左孩子为 2*i
5.2 如果 2*i + 1 >n ,则节点 无 右孩子,否则 右孩子 为 2* i+1,
5.3 i==1 时,节点i 是根节点,无双亲,否则 双亲节点 为 i/2 向下取整
下面 开始 说明二叉树的 顺序 存储方式。
二叉树的顺序存储方式 ,是按照 完全二叉树的 顺序 将 节点 存放在一个 数组里,并 将 不存在的节点 设置 为 0.
下面 给出 存储的 基本形态:
这样的存储方式 有 许多的 无用节点 占据了 存储空间,造成了 空间的 浪费。所以 这种存储方式 只适合 完全二叉树。
下面 给出 我的代码:
欢迎指出代码不足
// sqBinaryTree.cpp : 二叉树的顺序存储方式
//特点:只适合完全二叉树,否则浪费存储空间巨大
#include "stdafx.h"
#include <stdlib.h>
#include &