树——通用树结点数目、高度和度数的实现

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值