DS007-二叉树-顺序表表示法-先根-中根-后根遍历

本篇介绍二叉树的顺序表表示法,及其先、中、后根遍历。

以下面这棵二叉树为例。

 对应的顺序存储结构为: 

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;
}


猜你喜欢

转载自blog.csdn.net/weixin_43917370/article/details/108609241