树——通用树结点数目、高度和度数的实现
1,树中的属性操作有:
1,树中结点的数目,树中高度,树的度数;
2,树中结点数目:
1,定义功能:count(node)
1,在 node 为根结点的树中统计结点数目;
2,递归实现;
2,功能函数代码实现:
1 /* 求以 node 为根结点所代表的树的结点数目,实现的很精妙 */ 2 int count(GTreeNode<T>* node) const // 公有的 count() 函数为 const 函数 3 { 4 int ret = 0; 5 6 if( node != NULL ) // 为空则直接是空树的数目,0;第一种情况;如果 node 没孩子,则 for 循环不会执行,返回 1; 7 { 8 ret = 1; // 至少已经有一个结点,第二种情况 9 10 for(node->child.move(0); !node->child.end(); node->child.next()) // 第三种情况 11 { 12 ret += count(node->child.current()); // 当前结点所拥有的孩子的数目,然后累加 13 } 14 } 15 16 return ret; 17 }
3,树中结点成员函数代码实现:
1 int count() const 2 { 3 return count(root()); 4 }
3,树的高度:
1,定义功能:height(node)
1,获取 node 为根结点的树的高度;
2,递归实现;
2,功能函数代码实现:
1 /* 递归实现以 node 为根结点的树的高度 */ 2 int height(GTreeNode<T>* node) const 3 { 4 int ret = 0; 5 6 if( node != NULL ) // 空树高度为 0 7 { 8 for(node->child.move(0); !node->child.end(); node->child.next()) 9 { 10 int h = height(node->child.current()); // 求当前子树高度 11 12 if( ret < h ) // 遍历查找最大元素 13 { 14 ret = h; 15 } 16 } 17 18 ret = ret + 1; // 子树的高度加上根结点的高度为当前树的高度,包含了二、三两种情况 19 } 20 21 return ret; 22 }
3,树的高度成员函数代码实现:
1 int height() const 2 { 3 return height(root()); 4 }
4,树的度数:
1,定义功能:degree(node)
1,获取 node 为根结点的树的度数;
2,递归实现;
2,树的度数功能函数代码实现:
1 /* 递归实现以 node 为结点的树的度数 */ 2 int degree(GTreeNode<T>* node) const 3 { 4 int ret = 0; 5 6 if( node != NULL ) // 空树度数为 0 7 { 8 ret = node->child.length(); // 根结点孩子的数目 9 10 for(node->child.move(0); !node->child.end(); node->child.next()) 11 { 12 int d = degree(node->child.current()); // 每一颗子树都求度数 13 14 if( ret < d ) // 当前度数较小,则保存最新求出来的度数,这里同时也包含了根结点的孩子数目 15 { 16 ret = d; // ret 是度数最大值,即树的度数 17 } 18 } 19 } 20 21 return ret; 22 }
3,树的度数功能函数代码实现:
1 /* 递归实现以 node 为结点的树的度数 */ 2 int degree(GTreeNode<T>* node) const 3 { 4 int ret = 0; 5 6 if( node != NULL ) // 空树度数为 0 7 { 8 ret = node->child.length(); // 根结点孩子的数目 9 10 for(node->child.move(0); !node->child.end(); node->child.next()) 11 { 12 int d = degree(node->child.current()); // 每一颗子树都求度数 13 14 if( ret < d ) // 当前度数较小,则保存最新求出来的度数,这里同时也包含了根结点的孩子数目 15 { 16 ret = d; // ret 是度数最大值,即树的度数 17 } 18 } 19 } 20 21 return ret; 22 }
转载于:https://www.cnblogs.com/dishengAndziyu/p/10925326.html
树——通用树结点数目、高度和度数的实现相关推荐
- java语言 写一算法求其叶子数目_数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点。A. n+1B. 2n-1...
数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点.A. n+1B. 2n-1 数据结构(Java)在线作业 1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树 ...
- 树——通用树到二叉树的转换
1,已经创建了通用树结构,有必要创建另一种树结构吗? 2,简化树就直接减少结点中孩子的数量,但是这样树还能通用吗? 3,通用树结构的回顾: 1,双亲孩子表示法: 1,每个结点都有一个指向双亲的指针: ...
- 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算
1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...
- 树的高度和深度 | 结点的高度和深度
有个缺点,看到什么东西不管是不是重点只要说不通总是爱钻牛角尖. 对于 树的高度和深度(以及结点的高度和深度) 看了几本不同的书,都有各自的说法,多方查证吧,花了很多时间,最后归纳一下.(´。• ᵕ • ...
- 树:求二叉树的高度和叶子结点数量
算法代码很简单都是用使用递归计算,大家把递归思想领悟到就ok了. 二叉树高度算法 //求二叉树的高度 采用递归的方式 void GetHeight(BiTree tree, int* heightNu ...
- 数据结构封装之《GTree通用树》
说明: 本通用树复用了LinkList的代码,采用双亲孩子法实现: 通过复用LinkList的方法封装的GTree,请看:数据结构封装之<LinkList单向链表> 下面将给出该数据结构的 ...
- 数据结构显示树的所有结点_您需要了解的有关树数据结构的所有信息
数据结构显示树的所有结点 When you first learn to code, it's common to learn arrays as the "main data struct ...
- c#扩展方法奇思妙用高级篇七:“树”通用遍历器
我的上一篇随笔<c#扩展方法奇思妙用高级篇六:WinForm 控件选择器>中给出了一个WinForm的选择器,其实质就是一个"树"的遍历器,但这个遍历局限于WinFor ...
- 【编程题目】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印...
第 16 题(树): 题目(微软): 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 例如输入 8 / \ 6 10 / \ / \ 5 7 9 11 输出 8 6 1 ...
最新文章
- 1039 Course List for Student
- 用户变量和系统变量的区别
- python 管道游戏_Python实现超级玛丽游戏系列教程05添加地面,管道和阶梯冲突检测...
- 【mysql函数】find_in_set和locate(substr,str)的区别
- tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)...
- 数据结构1_java---单链表的操作,约瑟夫问题
- Python 标准化 - 使用logging
- 【转】犹太人的10句话,每一句都值得深思
- python单元测试的应用_单元测试pythongui应用程序的推荐方法是什么?
- Dede更新提示DedeTag Engine Create File False的解决办法
- 从Spring Boot信息泄露到AWS控制台劫持(攻破aws亚马逊服务器)
- php小猫咪图床源码V1.8
- pringboot后端解决跨域问题
- [转]Unity3D新手引导开发手记
- url动态追加参数_领高舆情优化:SEO网站URL优化的方法!
- ubuntu 显卡驱动崩掉导致分辨率异常的问题解决
- 谷歌免费域名邮箱申请全解
- 8.2.1-elasticsearch内置分词器之standard/simple
- R语言实现非线性回归
- 2019年web前端就业前景和工资待遇
热门文章
- 快速幂模板(java)
- jquery中的事件和动画
- 无聊的python课程_无聊的钢镚的python学习之路
- 如何设计LRU Cache算法
- java题目不会做那么解答_有几道JAVA的题目不会做 哪位高手来解答一下!谢
- matlab 十六进制数组,【MATLAB】MATLAB中读取二进制数据文件并加入到矩阵中
- 如何在ubuntu下安装detectron2_Anaconda中安装Cascade RCNN(Detectron)的若干问题
- 太绝了,赠你34张网络知识架构思维导图
- We Are Cisco|25年后,为什么我仍是思科认证互联网专家
- 【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美