二叉树用顺序表实现 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);
}
书上写的程序代码有些地方是错的,幸亏我多测试了几组数据,找出来了这个错误,但刚开始时,实在不知道这个错误应该怎么去改,因此信心一度受到打击,且放下这个代码好几天,没有理它,今天下午又把它拿出来,静下心来,测试了几组数据,认真的观察了一下规律,就被我给写出来了,呵呵,真是高兴啊,解决了遗留下来的问题。
二叉树的顺序表,一般很少用,只有用到完全二叉树时,才能发挥它的优势,所以,学习二叉树的顺序表还是有一定用处的!
#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);
}
书上写的程序代码有些地方是错的,幸亏我多测试了几组数据,找出来了这个错误,但刚开始时,实在不知道这个错误应该怎么去改,因此信心一度受到打击,且放下这个代码好几天,没有理它,今天下午又把它拿出来,静下心来,测试了几组数据,认真的观察了一下规律,就被我给写出来了,呵呵,真是高兴啊,解决了遗留下来的问题。
二叉树的顺序表,一般很少用,只有用到完全二叉树时,才能发挥它的优势,所以,学习二叉树的顺序表还是有一定用处的!
相关文章推荐
- S型顺序遍历二叉树(c++实现)
- 【代码】C++实现二叉树基本操作及测试用例
- 二叉树用数组顺序存储(完全二叉树)并实现三种遍历,代码详解!!!
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现 ——感想
- 二叉树数组实现[C/C++]代码
- 查找二叉树的C++代码实现
- 算式计算器C++实现代码(顺序栈结构 增加了一些功能 求指教)
- c++ 顺序存储和链表存储 栈的实现代码
- 二叉树的基本操作 C++代码实现
- 二叉树数组实现[C/C++]代码
- 算式计算器C++实现代码(顺序栈结构 增加了一些功能 比如三角函数 求指教)
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- 顺序表SqList的C++代码实现
- 求二叉树中节点间的最大距离(c++代码完整实现)
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- C++实现顺序排序算法简单示例代码
- 算法导论第12章-搜索二叉树伪代码的C++程序全实现
- 【代码】C++实现二叉树基本操作及测试用例
- 二叉树的链式存储结构 C++代码实现