



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习资料收集于网络,仅供参考#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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化学工业清洁生产指南
- 地产项目法律诉讼指南
- 如何引导初高中学生正确面对意外挫折
- 农业现代科技创新成果推广应用方案
- 利润分读审计规定
- 工作总结:感恩与成长的回顾
- 牛津译林版英语期中复习资料
- 制造企业安全生产责任制落实案例
- 智能制造车间设备运行监控方案
- 企业级电子商务信息安全服务协议
- 2024年连云港东海县招聘社区工作者真题
- 燃料电池催化剂研究报告
- 2025-2026学年地质版(2024)小学体育与健康三年级(全一册)教学设计(附目录P123)
- 【MOOC】人格与精神障碍-学做自己的心理医生-暨南大学 中国大学慕课MOOC答案
- NB-T 47013.15-2021 承压设备无损检测 第15部分:相控阵超声检测
- 连续性肾脏替代疗法(CRRT)!课件
- NMR有机氟谱课件
- 急诊科标本采集错误应急预案脚本
- elements-of-communication
- 老港镇中心小学三年发展规划中期评估自评报告
- 张宗子《春在溪头荠菜花》阅读答案
评论
0/150
提交评论