本以为二叉树的顺序存储结构实现非常简单,类似于线性表,而在实际操作当中遇到了一些小问题,首先是如何判别树节点是否为空,我采用的方法初始化数组值为-111,新插入的节点覆盖初始值,而没有覆盖初始值的则认为是空节点。对于节点i,其左儿子节点为2*i,右儿子节点为2*i+1,掌握了这个规律,二叉树的前中后序遍历就不难实现了,本文只以前序遍历进行间接。Print函数是根据数组的顺序打印元素的,对于空节点选择跳过,可以认为是层次遍历的方法,递归实现的时候开始使用了循环,犯了逻辑不清的错误,在调试的时候发现了此问题,递归就已经是循环了。顺序存储的二叉树有很多空节点,在内存空间的使用上是浪费的,不过层次清晰,按层次遍历实现方便,适合初学者学习使用。下面是二叉树的顺序存储结构的C++实现:
//linearbintree.h
#ifndef LINEARBINTREE_H
#define LINEARBINTREE_H
#include <IOSTREAM>
#include <MEMORY>
const int TREEMAXSIZE=100;
template<class Type>
class LinearBinTree
{
private:
Type Data[TREEMAXSIZE];
int last;
public:
LinearBinTree():last(0){
for(int i=0;i<TREEMAXSIZE;i++)
Data[i]=Type(-111);
}
~LinearBinTree(){}
bool AddNode(Type);
bool IsEmpty(){return last==0;}
bool IsFull(){return