/*二叉树用顺序表实现*/
#include <iostream>
using namespace std;
/*完全二叉树顺序表的定义*/
#define MAX_BITREE_SIZE 100
typedef int SqBiTree[MAX_BITREE_SIZE];
/*创建一个二叉树顺序表*/
void CreateBiTree(SqBiTree &T)
{
int i;
cout<<"输入元素个数:";
cin>>T[0];
//cout<<T[0];
for(i=1;i<=T[0];i++)
cin>>T[i];
}
/*先序非递归遍历*/
void PreOrderBiTree(SqBiTree &T)
{
int n;
int i;
int j;
n=T[0];
for(i=1;i<=n;i++)
{
if(i==1)
j=1;
else if(2*j<=n)
j=2*j;
else if(j%2==0&&j<n)
j=j+1;
else if(j>1)
{
while(j%2!=0||j==n)
j=j/2;
j=j+1;
}//这里是难点,也是关键。
cout<<T[j]<<" ";
}
cout<<endl<<endl;
}
/*后续非递归遍历*/
void PostOrderBiTree(SqBiTree &T)
{
int i,n,j=1;
n=T[0];
for(i=1;i<=n;i++)
{
if(i==1)
while(2*j<=n)
j=2*j;
else if(j%2==0&&j<n)
{
j=j+1;
while(2*j<=n)
j=2*j;
}
else if(j>1)
j=j/2;
cout<<T[j]<<" ";
}
cout<<endl;
}
void main()
{
SqBiTree T;
CreateBiTree(T);
PreOrderBiTree(T);
PostOrderBiTree(T);
}
书上写的程序代码有些地方是错的,幸亏我多测试了几组数据,找出来了这个错误,但刚开始时,实在不知道这个错误应该怎么去改,因此信心一度受到打击,且放下这个代码好几天,没有理它,今天下午又把它拿出来,静下心来,测试了几组数据,认真的观察了一下规律,就被我给写出来了,呵呵,真是高兴啊,解决了遗留下来的问题。
二叉树的顺序表,一般很少用,只有用到完全二叉树时,才能发挥它的优势,所以,学习二叉树的顺序表还是有一定用处的!
标签:顺序,cout,实现,BITREE,C++,SqBiTree,int,二叉树 From: https://blog.51cto.com/u_5173797/7251969