实验5:二叉树的链式储存

#include "stdafx.h"
#include <iostream>
using namespace std;
struct Tnode
{
	char data;
	Tnode * lchild, *rchild;
};

class Etree
{
public:
	Etree()
	{
		root = Creat(root);
	}
	~Etree()
	{
		Release(root);
	}
	void Preorder()
	{
		Preorder(root);
	}
	void Inorder()
	{
		Inorder(root);
	}
	void Postorder()
	{
		Postorder(root);
	}
	void find()
	{
		void findnode(Tnode * bt);
	}
	
private:
	Tnode * root;
	Tnode * Creat(Tnode *bt);
	void Release(Tnode *bt);
	void Preorder(Tnode *bt);
	void Inorder(Tnode * bt);
	void Postorder(Tnode * bt);
	void findnode(Tnode * bt);
};


Tnode * Etree::Creat(Tnode * bt)
{
	char ch;
	cout << "请输入创建一棵二叉树的结点数据:" << endl;
	cin >> ch;
	if (ch == '#') return NULL;
	else
	{
		bt = new Tnode;
		bt->data = ch;
		bt->lchild = Creat(bt->lchild);
		bt->rchild = Creat(bt->rchild);
	}
	return bt;
}

void Etree::Release(Tnode * bt)
{
	if (bt != NULL)
	{
		Release(bt->lchild);
		Release(bt->rchild);
		delete bt;
	}
}

void Etree::Preorder(Tnode * bt)
{
	if (bt == NULL)
		return;
	else
	{
		cout << bt->data << " ";
		Preorder(bt->lchild);
		Preorder(bt->rchild);
	}
}


void Etree::Inorder(Tnode * bt)
{
	if (bt == NULL)
		return;
	else
	{
		Inorder(bt->lchild);
		cout << bt->data << " ";
		Inorder(bt->rchild);
	}
}

void Etree::Postorder(Tnode * bt)
{
	if (bt == NULL)
		return;
	else
	{
		Postorder(bt->lchild);
		Postorder(bt->rchild);
		cout << bt->data << " ";
	}
}



void Etree::findnode(Tnode * bt)
{
	char zhi;
	cout << "请输出要查看的节点的值" << endl;
	cin >> zhi;
	if (zhi == '#')
		return;
	else
	{
		while (bt != NULL)
		{
			Preorder(bt->lchild);
			Preorder(bt->rchild);
			if (bt->data == zhi)
			{
				{
					if (bt->lchild == NULL)
						cout << "该节点无左节点。" << endl;
					else
						cout << "该节点的左节点的值为:" << (bt->lchild)->data << endl;
				}
				{
					if (bt->rchild == NULL)
						cout << "该节点无右节点。" << endl;
					else
						cout << "该节点的右节点的值为:" << (bt->rchild)->data << endl;
				}
			}
		}
	}
}

int main()
{
	Etree T;
	cout << "前序遍历:" << endl;
	T.Preorder();
	cout << endl;
	cout << "中序遍历:" << endl;
	T.Inorder();
	cout << endl;
	cout << "后序遍历:" << endl;
	T.Postorder();
	cout << endl;
	T.find();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u011633428/article/details/80425686