mytree.cpp

//tree.h
#pragma once

template<typename A>
class Tree
{
public:
	typedef struct node {
		A data;
		struct node* left, * right;
	}node,*tree;
	tree T,stack[100];
	tree p,q;
	tree queue[100];
	void build_tree(tree &T);
	void output(A ch);
	void output_level(A ch, int level);
	void preorder1_tree(tree T);
	void inorder1_tree(tree T);
	void postorder1_tree(tree T);
	void preorder2_tree(tree T);
	void inorder2_tree(tree T);
	void postorder2_tree(tree T);
	void levelorder_tree(tree T);
};

template<typename A>
void Tree<A>::build_tree(tree &T) {
	A ch;
	cin >> ch;
	if (ch == '#'){
		T=NULL;
	}
	else {
		T = new node[sizeof(node)];
		T->data = ch;
		build_tree(T->left);
		build_tree(T->right);
	}
}

template<typename A>
void Tree<A>::output(A ch)
{
	cout << ch << ' ';
}

template<typename A>
void Tree<A>::output_level(A ch, int level) {
	cout << ch << "on" << level << "level" << ' ';
}

template<typename A>
void Tree<A>::preorder1_tree(tree T) {
	if (T != NULL) {
		cout << T->data << endl;
		preorder1_tree(T->left);
		preorder1_tree(T->right);
	}

}

template<typename A>
void Tree<A>::inorder1_tree(tree T)
{
	if (T != NULL) {	
		inorder1_tree(T->left);
		cout << T->data << endl;
		inorder1_tree(T->right);
	}
}

template<typename A>
void Tree<A>::postorder1_tree(tree T)
{
	if (T != NULL) {
	postorder1_tree(T->left);
	postorder1_tree(T->right);
	cout << T->data << endl;
	}
}

template<typename A>
void Tree<A>::preorder2_tree(tree T)
{

}

template<typename A>
void Tree<A>::inorder2_tree(tree T) {

	int top = -1;
	p = T;
	while (p || top != -1)
	{
		if (p)
		{
			stack[++top] = p;
			p = p->left;
		}
		else {
			q=stack[top--];
			cout << q->data;
			p = q->right;
		}
	}
}

template<typename A>
void Tree<A>::postorder2_tree(tree T) {

}

template<typename A>
void Tree<A>::levelorder_tree(tree T) {
	int front = 0;
	int rear = 0;
	queue[rear] = T;
	rear=(rear+1)%100;
	while (front!=rear) {
		p = queue[front];
		front = (front + 1) % 100;
		cout << p->data << " ";
		if (p->left != NULL) {
			queue[rear] = p->left;
			rear = (rear + 1) % 100;
		}
		if (p->right != NULL) {
			queue[rear] = p->right;
			rear = (rear + 1) % 100;
		}
	}
}


//main.cpp
#include<iostream>
using namespace std;
#include"tree.h"

int main()
{
	Tree<char> obj1;
	obj1.build_tree(obj1.T);
	obj1.inorder1_tree(obj1.T);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值