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

树——通用树结点数目、高度和度数的实现相关推荐

  1. java语言 写一算法求其叶子数目_数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点。A. n+1B. 2n-1...

    数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点.A. n+1B. 2n-1 数据结构(Java)在线作业 1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树 ...

  2. 树——通用树到二叉树的转换

    1,已经创建了通用树结构,有必要创建另一种树结构吗? 2,简化树就直接减少结点中孩子的数量,但是这样树还能通用吗? 3,通用树结构的回顾: 1,双亲孩子表示法: 1,每个结点都有一个指向双亲的指针: ...

  3. 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

    1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...

  4. 树的高度和深度 | 结点的高度和深度

    有个缺点,看到什么东西不管是不是重点只要说不通总是爱钻牛角尖. 对于 树的高度和深度(以及结点的高度和深度) 看了几本不同的书,都有各自的说法,多方查证吧,花了很多时间,最后归纳一下.(´。• ᵕ • ...

  5. 树:求二叉树的高度和叶子结点数量

    算法代码很简单都是用使用递归计算,大家把递归思想领悟到就ok了. 二叉树高度算法 //求二叉树的高度 采用递归的方式 void GetHeight(BiTree tree, int* heightNu ...

  6. 数据结构封装之《GTree通用树》

    说明: 本通用树复用了LinkList的代码,采用双亲孩子法实现: 通过复用LinkList的方法封装的GTree,请看:数据结构封装之<LinkList单向链表> 下面将给出该数据结构的 ...

  7. 数据结构显示树的所有结点_您需要了解的有关树数据结构的所有信息

    数据结构显示树的所有结点 When you first learn to code, it's common to learn arrays as the "main data struct ...

  8. c#扩展方法奇思妙用高级篇七:“树”通用遍历器

    我的上一篇随笔<c#扩展方法奇思妙用高级篇六:WinForm 控件选择器>中给出了一个WinForm的选择器,其实质就是一个"树"的遍历器,但这个遍历局限于WinFor ...

  9. 【编程题目】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印...

    第 16 题(树): 题目(微软): 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 例如输入 8 / \ 6 10 / \ / \ 5 7 9 11 输出 8 6 1 ...

最新文章

  1. 1039 Course List for Student
  2. 用户变量和系统变量的区别
  3. python 管道游戏_Python实现超级玛丽游戏系列教程05添加地面,管道和阶梯冲突检测...
  4. 【mysql函数】find_in_set和locate(substr,str)的区别
  5. tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)...
  6. 数据结构1_java---单链表的操作,约瑟夫问题
  7. Python 标准化 - 使用logging
  8. 【转】犹太人的10句话,每一句都值得深思
  9. python单元测试的应用_单元测试pythongui应用程序的推荐方法是什么?
  10. Dede更新提示DedeTag Engine Create File False的解决办法
  11. 从Spring Boot信息泄露到AWS控制台劫持(攻破aws亚马逊服务器)
  12. php小猫咪图床源码V1.8
  13. pringboot后端解决跨域问题
  14. [转]Unity3D新手引导开发手记
  15. url动态追加参数_领高舆情优化:SEO网站URL优化的方法!
  16. ubuntu 显卡驱动崩掉导致分辨率异常的问题解决
  17. 谷歌免费域名邮箱申请全解
  18. 8.2.1-elasticsearch内置分词器之standard/simple
  19. R语言实现非线性回归
  20. 2019年web前端就业前景和工资待遇

热门文章

  1. 快速幂模板(java)
  2. jquery中的事件和动画
  3. 无聊的python课程_无聊的钢镚的python学习之路
  4. 如何设计LRU Cache算法
  5. java题目不会做那么解答_有几道JAVA的题目不会做 哪位高手来解答一下!谢
  6. matlab 十六进制数组,【MATLAB】MATLAB中读取二进制数据文件并加入到矩阵中
  7. 如何在ubuntu下安装detectron2_Anaconda中安装Cascade RCNN(Detectron)的若干问题
  8. 太绝了,赠你34张网络知识架构思维导图
  9. We Are Cisco|25年后,为什么我仍是思科认证互联网专家
  10. 【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美