数据结构实验五:树和二叉树列实验2(利用链式存储结构方法存储)

匿名 (未验证) 提交于 2019-12-03 00:19:01
一、实验目的
1、 熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;
2、 掌握树的顺序结构的实现;
3、 学会运用树的知识解决实际问题

1、自己确定一个二叉树(树结点类型、数目和结构自定)利用链式存储结构方法存储。实
现树的构造,并完成:
1) 用前序遍历、中序遍历、后序遍历输出结点数据;
2) 以合理的格式,输出各个结点和双亲、孩子结点信息;

3) 输出所有的叶子结点信息;


确定的二叉树:


代码如下:

#include <iostream> using namespace std; template <class Node>  struct node { 	Node data; 	node<Node> *lchild; 	node<Node> *rchild; };  template <class Node> class BiTree { private: 	node<Node> *root; 	node<Node> *Creat(node<Node> *bt); 	void Release(node<Node> *bt); 	void PreOrder(node<Node> *bt); 	void InOrder(node<Node> *bt); 	void PostOrder(node<Node> *bt); 	void FindChild(node<Node> *bt); 	void FindParent(node<Node> *bt); 	void FindLeaf(node<Node> *bt); public: 	BiTree() { root = Creat(root); } 	~BiTree() { Release(root); } 	void PreOrder(){PreOrder(root);} 	void InOrder(){InOrder(root);} 	void PostOrder() { PostOrder(root); } 	void FindChild(){FindChild(root);} 	void FindParent(){FindParent(root);} 	void FindLeaf(){FindLeaf(root);} }; template <class Node> node<Node> * BiTree<Node>::Creat(node<Node> *bt) { 	Node a; 	cin >> a; 	if (a == '#') 		bt = NULL; 	else { 		bt =new node<Node>; 		bt->data = a; 		bt->lchild = Creat(bt->lchild); 		bt->rchild = Creat(bt->rchild); 	} 	return bt; } template <class Node> void BiTree<Node>::Release(node<Node> *bt) {  	if (bt != NULL) { 		Release(bt->lchild); 		Release(bt->rchild); 		delete(bt); 	} } template <class Node> void BiTree<Node>::PreOrder(node<Node> *bt) { 	if (bt != NULL) { 		cout << bt->data << ' '; 		PreOrder(bt->lchild); 		PreOrder(bt->rchild); 	} } template <class Node> void BiTree<Node>::InOrder(node<Node> *bt) { 	if (bt != NULL) { 		InOrder(bt->lchild); 		cout << bt->data << ' '; 		InOrder(bt->rchild); 	} } template <class Node> void BiTree<Node>::PostOrder(node<Node> *bt) { 	if (bt != NULL) { 		PostOrder(bt->lchild); 		PostOrder(bt->rchild); 		cout << bt->data << ' '; 	} } template <class Node> void BiTree<Node>::FindChild(node<Node> *bt){ 		 		if (bt != NULL) { 		if (bt->lchild!=NULL) 			cout << bt->data <<"左孩子"<<bt->lchild->data<<endl; 		else 			cout << bt->data <<"无左孩子"<<endl; 		if (bt->rchild!=NULL) 			cout << bt->data<<"右孩子"<<bt->rchild->data<<endl; 		else 			cout << bt->data <<"无右孩子"<<endl; 		FindChild(bt->lchild); 		FindChild(bt->rchild); 	} }  template <class Node> void BiTree<Node>::FindParent(node<Node> *bt){ 	if (bt != NULL) { 		if (bt==root) 			cout<<bt->data<<"为根结点"<<endl; 		if (bt->lchild!=NULL) 			cout <<bt->lchild->data<<"双亲为"<< bt->data <<endl; 		if (bt->rchild!=NULL) 			cout <<bt->rchild->data <<"双亲为"<<bt->data<<endl; 		FindParent(bt->lchild); 		FindParent(bt->rchild); 	}  }  template <class Node> void BiTree<Node>::FindLeaf(node<Node> *bt){ 	if (bt != NULL) { 		if (bt->lchild==NULL&&bt->rchild==NULL) 			cout<< bt->data <<' '; 		FindLeaf(bt->lchild); 		FindLeaf(bt->rchild); 	} } int main() { 	cout<<"请输入二叉树:"<<endl; 	BiTree<char> B; 	cout<<"前序遍历:"<<endl; 	B.PreOrder(); 	cout << endl; 	cout<<"中序遍历:"<<endl; 	B.InOrder(); 	cout << endl; 	cout<<"后序遍历:"<<endl; 	B.PostOrder(); 	cout << endl; 	cout<<"找孩子结点:"<<endl; 	B.FindChild(); 	cout << endl; 	cout<<"找双亲结点:"<<endl; 	B.FindParent(); 	cout << endl; 	cout<<"找叶子结点:"<<endl; 	B.FindLeaf(); 	cout << endl; 	return 0; }   

结果截图:


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!