二叉树用顺序表实现 C++代码实现

/*二叉树用顺序表实现*/

 

#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);

}

 

书上写的程序代码有些地方是错的,幸亏我多测试了几组数据,找出来了这个错误,但刚开始时,实在不知道这个错误应该怎么去改,因此信心一度受到打击,且放下这个代码好几天,没有理它,今天下午又把它拿出来,静下心来,测试了几组数据,认真的观察了一下规律,就被我给写出来了,呵呵,真是高兴啊,解决了遗留下来的问题。

二叉树的顺序表,一般很少用,只有用到完全二叉树时,才能发挥它的优势,所以,学习二叉树的顺序表还是有一定用处的!

你可能感兴趣的:(C++,测试)