本篇介绍二叉树的顺序表表示法,及其先、中、后根遍历。
以下面这棵二叉树为例。
对应的顺序存储结构为:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| a | b | c | \0 | \0 | d | e | \0 | \0 | \0 | \0 | \0 | \0 | \0 | \0 |
|
很遗憾,我没有想到怎样写成泛型的模板类。
#include "stdafx.h"
#include<iostream>
using namespace std;
class tree
{//基于顺序表的二叉树
char elem[100];
int length;
public:
tree()
{//构造函数,一棵静态二叉树
elem[1] = 'a';
elem[2] = 'b'; elem[3] = 'c';
elem[4] = '\0'; elem[5] = '\0'; elem[6] = 'd'; elem[7] = 'e';
elem[8] = '\0'; elem[9] = '\0'; elem[10] = '\0'; elem[11] = '\0';
elem[12] = '\0'; elem[13] = '\0'; elem[14] = '\0'; elem[15] = '\0';
}
void preTraverse(int root)
{//先根遍历
if (elem[root]!='\0')
{
cout << elem[root]<< " ";
preTraverse(root*2);
preTraverse(root*2+1);
}
}
void preTraverse()
{//先根遍历
preTraverse(1);
}
void InTraverse(int root)
{//中根遍历
if (elem[root]!='\0')
{
InTraverse(root*2);
cout << elem[root] << " ";
InTraverse(root*2+1);
}
}
void InTraverse()
{
InTraverse(1);
}
void postTraverse(int root)
{//后根遍历
if (elem[root] != '\0')
{
postTraverse(root*2);
postTraverse(root*2+1);
cout << elem[root]<< " ";
}
}
void postTraverse()
{
postTraverse(1);
}
};
int main()
{
tree t;
t.preTraverse();
cout << endl;
t.InTraverse();
cout << endl;
t.postTraverse();
cout << endl;
return 0;
}