一、实验目的
1、 熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;
2、 掌握树的顺序结构的实现;
3、 学会运用树的知识解决实际问题
1、自己确定一个二叉树(树结点类型、数目和结构自定)利用链式存储结构方法存储。实
现树的构造,并完成:
1) 用前序遍历、中序遍历、后序遍历输出结点数据;
2) 以合理的格式,输出各个结点和双亲、孩子结点信息;
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; }
结果截图: