西农数据结构作业_二叉树1

 顺序存储一棵完全二叉树结点记录,结点个数为n。根据所输入的顺序结构记录建立二叉树,输出树的先序,中序和后序遍历结果。

 

这个就是二叉树最简单的前序、中序、后序遍历,不难,代码量也很小。主要是理解递归。

#include <iostream>
using namespace std;
int cnt =0;
int a1 = 0;
int b1 = 0;
int c1 = 0;
class BiTree {
public:
	BiTree() {

	}
	BiTree(int n) {
		num = n;
		data = new int[n];
		for (int i = 0; i < n; i++) {
			cin >> data[i];
		}
	};

	void Pre(int x);
	void Mid(int x);
	void Post(int x);
	void Print();
private:
	int* data;
	int num;
	int a[1000];
	int b[1000];
	int c[1000];
	
	
};
int main() {
	int n;
	cin >> n;
	BiTree t(n);
	t.Pre(0);
	
	t.Mid(0);
	
	t.Post(0);
	
	t. Print();
	
}

void BiTree::Pre(int x)
{
	if (data[x] == 0 || x > num - 1)
		return;
	int n = x + 1;
	int left = 2 * n;
	int right = 2 * n + 1;

	a[a1++] = data[x];
	Pre(left - 1);
	Pre(right - 1);

}

void BiTree::Mid(int x)
{
	
	if (data[x] == 0 || x > num - 1) {
		cnt++;
		return;
	}
	cnt++;
		

	int n = x + 1;
	int left = 2 * n;
	int right = 2 * n + 1;
	Mid(left - 1);
	b[b1++] = data[x];
	Mid(right - 1);
}

void BiTree::Post(int x)
{
	if (data[x] == 0 || x > num - 1)
		return;
	int n = x + 1;
	int left = 2 * n;
	int right = 2 * n + 1;
	Post(left - 1);
	Post(right - 1);
	c[c1++] = data[x];

}

void BiTree::Print()
{
	for (int i = 0; i < a1 - 1; i++)
		cout << a[i] << " ";
	cout << a[a1-1]  << endl;

	for (int i = 0; i < b1 - 1; i++)
		cout << b[i] << " ";
	cout << b[b1 - 1] << endl;

	for (int i = 0; i < c1 - 1; i++)
		cout << c[i] << " ";
	cout << c[c1 - 1] << endl;

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值