求二叉树的深度、总结点数和叶子结点数

二叉树的二叉链表的存储结构:


typedef   char   TElemType;

typedef   struct    BiTNode

{

             TElemType data;//数据元素

             BiTNode  *  lchild;//指向左孩子

              BiTNode  *  rchild;//指向右孩子

}BiTNode,* BiTree;



一、二叉树的深度

如果二叉树为空,结点的深度为0;

如果二叉树只有一个结点G为例,其中,它的左右子树的深度为0;而这种情况二叉树的深度为1。

如果二叉树有两个结点D,G为例,其中,以D为根结点的二叉树的左子树的深度为0,右子树的深度为(0+1);而这种情况二叉树的深度为2。

…………

如果二叉树有n个结点,二叉树的深度为二叉树左右子树深度的最大值+1。

代码:

int Depth(BiTree T)

{

                     int m,n;

                     if(!T)                                                   return 0;

                     if(!T->lchild && !T->rchild)           return 1;

                     else

                     {

                                    m = Depth(T->lchild);

                                    n = Depth(T->rchild);

                                     return 1+(m>n?m:n);

                        }

}


二、二叉树的叶子结点数

如果二叉树为空,二叉树的叶子结点数为0;

如果二叉树只有一个结点G(左右子树为空)为例,而这种情况二叉树的叶子结点数为1。

如果二叉树有两个结点D(右子树为非空),G(左右子树为空)为例,其中,以D为根结点的二叉树的左子树的叶子结点数为0,右子树的叶子结点数为1;而这种情况二叉树的叶子结点数为1。

…………

如果二叉树有n个结点,二叉树的叶子结点数为二叉树左右子树叶子结点数的和。

代码:

int CountLeaf(BiTree T)

{

                             int m,n;

                             if(!T)                                                             return 0;

                              if(!T->lchild && !T->rchild)                   return 1;

                              else

                             {

                                            m = CountLeaf(T->lchild);

                                             n = CountLeaf(T->rchild);

                                             return m+n;

                                }

}


三、二叉树的结点数

如果二叉树为空,二叉树的结点数为0;

如果二叉树只有一个结点G(左右子树为空)为例,而这种情况二叉树的结点数为1。

如果二叉树有两个结点D(右子树为非空),G(左右子树为空)为例,其中,以D为根结点的二叉树的左子树的结点数为0,右子树的结点数为1;而这种情况二叉树的结点数为2。

…………

如果二叉树有n个结点,二叉树的结点数为二叉树左右子树结点数的和+1(根结点)。

代码:

int Count(BiTree T)

{

                       int m,n;

                       if(!T)                                                      return 0;

                        if(!T->lchild && !T->rchild)            return 1;

                        else

                       {

                                    m = Count(T->lchild);

                                    n = Count(T->rchild);

                                    return m+n+1;

                      }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,470评论 0 25
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,867评论 0 19
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,581评论 0 14
  • 1.树的定义 树是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种:(1)有且仅有一个特定的称为...
    e40c669177be阅读 2,947评论 1 14
  • 每个人都会有自己负面情绪的时候 我们该如何做呢? 有时我们乐意倾诉 别人不见得乐意倾听 我正经历着这一个阶段 这时...
    郑大宝cc阅读 128评论 0 0