全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#define MAX 30 /树节点的最大数using namespace std;templateclass nodepublic:node()child = nextsibling = NULL;T ele; /节点值node*child, *nextsibling;/左儿子右兄弟;templateclass Mytreepublic:Mytree()tree = NULL;Mytree()delete tree;void CreatTree(node*); /构造孩子兄弟表示法的树T GetParent(node*,T t); /返回树的父亲节点T GetLeftChild(node*,T); /返回树的最左儿子T GetRightsibling(node*,T); /返回树的最右兄弟T GetRoot(node*); /返回树的根节点node* RetPoint(T, node*); /返回值为t的节点的指针node* RetParentPoint(T, node*);/返回值为t的节点父亲指针void Display(node*); /树的左儿子右兄弟表示法的前序、中序、后序遍历private:void preTraverseTree(node*); /递归先序遍历void InTraverseTree(node*); /递归中序遍历void PostTraverseTree(node*); /递归后序遍历node *tree;templatevoid Mytree:CreatTree(node*tree) /构造左儿子右兄弟表示的树 /以tree为根节点构建if (*tree) != NULL)cout 输入节点 ele 的左儿子右兄弟(没有的话输入#):;node*a = new node;node*b = new node;cin a-ele b-ele;if (a-ele != #) (*tree)-child = a; /有左儿子else (*tree)-child = NULL;if (b-ele != #) (*tree)-nextsibling = b; /有有兄弟else (*tree)-nextsibling = NULL;CreatTree(&(*tree)-child); /递归构造树CreatTree(&(*tree)-nextsibling);templateT Mytree:GetParent(node *tree,T t) /返回节点值为t的父亲node*p = RetParentPoint(t, tree);if (p)return p-ele;else return NULL;templateT Mytree:GetRoot(node*tree) /返回树的根节点值return tree-ele;templateT Mytree:GetLeftChild(node*tree,T t) /返回树的左儿子node*p=RetPoint(t, tree);if (p&p-child) return p-child-ele;else return NULL;templateT Mytree:GetRightsibling(node*tree,T t) /得到树tree的右兄弟node*p=RetPoint(t, tree);if (p&p-nextsibling) return p-nextsibling-ele;else return NULL;templatevoid Mytree:Display(node*tree) /三种递归遍历cout 先序递归遍历:;preTraverseTree(tree);cout endl;cout 中序递归遍历:;InTraverseTree(tree);cout endl;cout 后序递归遍历:;PostTraverseTree(tree);cout endl;templatevoid Mytree:preTraverseTree(node*tree) /先序递归遍历if (tree)cout ele child);preTraverseTree(tree-nextsibling);template void Mytree:InTraverseTree(node*tree) /中序递归遍历if (tree)InTraverseTree(tree-child);cout ele nextsibling);templatevoid Mytree:PostTraverseTree(node*tree) /后序递归遍历if(tree)PostTraverseTree(tree-nextsibling);PostTraverseTree(tree-child);cout ele ;templatenode* Mytree:RetPoint(T t, node* tree) /返回树节点值为t的指针if (tree)if (tree-ele = t) return tree;else if (RetPoint(t, tree-child)!=NULL)return RetPoint(t, tree-child);else if (RetPoint(t, tree-nextsibling) != NULL)return RetPoint(t, tree-nextsibling);else return NULL;else return NULL;templatenode* Mytree:RetParentPoint(T t, node*tree)if (tree&tree-child)if (tree-ele = t) return tree;else if (RetParentPoint(t, tree-child)return RetParentPoint(t, tree-child);else if (RetParentPoint(t, tree-nextsibling)return RetParentPoint(t, tree-nextsibling);else return NULL;int main()Mytree mytree;node *root = new node;cout root-ele;mytree.CreatTree(&root);cout树的根:mytree.GetRoot(root)endl;cout t;cout t的左儿子 mytree.GetLeftChild(root, t) endl;cout t的右兄弟 mytree.GetRightsibling(root, t) endl;cout t的父节点: mytree.GetParent(root,t) endl;cout 树的左儿子右兄弟表示法的三种遍历: endl;mytree.Display(root);return 0;/*输入根节点:a输入节点a的左儿子右兄弟(没有的话输入#):b c输入节点b的左儿子右兄弟(没有的话输入#):d e输入节点d的左儿子右兄弟(没有的话
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 司机配送协议书范本
- 合作摊位协议书范本
- 商务合作协议书合同
- 口罩委托加工协议书
- 合伙生意赔偿协议书
- 合伙做生意合同范本
- 口罩膜采购合同范本
- 合伙酒水买卖协议书
- 合作公司协议书模板
- 2025年高中一年级生物实验操作试卷(含答案)
- 桥架安装施工方案设计规范要求
- 2025辽宁朝阳市公安机关招聘警务辅助人员301人笔试考试备考试题及答案解析
- 三级安全教育旋挖钻机试题及答案
- 向以前说拜拜课件
- 劳动课拔草施肥课件
- 2025年风光储电站新能源发电项目投资合同协议
- 改革开放精神宣讲
- 林草行业生产安全重大事故隐患判定标准
- 从业务骨干到管理高手
- 高二上学期哪吒课堂趣味惩罚游戏(课件版)
- (2025年)旅游政策与法规试题加答案
评论
0/150
提交评论