1.必须把二叉树补全成为完全二叉树,对应位置没有节点的补虚节点,虚节点只占位,不存放节点数据。
2.完成二叉树第i个节点的左孩子节点就是2i,有孩子节点就是2i+1。
#include <stdio.h>
#include <stdlib.h>
#define COUNT 200
#pragma warning(disable:4996)
/*
二叉树的顺序存储
要把一般二叉树改为完全二叉树才行,虚节点占位不放数据
*/
//完全二叉树结构体
typedef struct _FullBiTree
{
char nTreeArray[COUNT];//存放二叉树结点信息
}FullBiTree,*PFullBiTree;
//求指定X的指定Y次方
int Pow(int x, int y)
{
int nIndex = 0;
int nRet = 1;
//任何数的0次方都是1
if (y == 0)
return 1;
for (; nIndex < y; nIndex++)
{
nRet *= x;
}
return nRet;
}
//输入节点的数据
//@pTree:二叉树指针
//@nLevle:第几层
bool InputNodeData(PFullBiTree pTree,int nLevle)
{
//当前层的根节点数量
int nNodeCount = 0;
//索引
int nIndex = 0;
//空节点数量
int nCount = 0;
//左右节点
char nLeftNode = 0;
char nRightNode = 0;
//根据层数获得当前层有多少个节点
nNodeCount = Pow(2, nLevle);
//当前输入的是根节点的时候
if (nNodeCount == 1)
{