二叉树的顺序存储结构的C++实现

本文探讨了二叉树的顺序存储结构,通过初始化数组元素为-111来判断节点是否为空,并介绍了如何确定左右子节点的位置。内容包括前序遍历的实现,特别指出在递归过程中应避免逻辑错误。虽然顺序存储会造成空间浪费,但层次遍历易于实现,适合学习。
摘要由CSDN通过智能技术生成

本以为二叉树的顺序存储结构实现非常简单,类似于线性表,而在实际操作当中遇到了一些小问题,首先是如何判别树节点是否为空,我采用的方法初始化数组值为-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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值