您的位置:首页 > 编程语言 > C语言/C++

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

2010-11-17 22:07 465 查看
/*二叉树用顺序表实现*/

 
#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++ 测试