六:二叉树中第k层节点个数与二叉树叶子节点个数

原创 2015年07月07日 23:04:34

二叉树中第k层节点个数


递归解法:

(1)如果二叉树为空或者k<1返回0

(2)如果二叉树不为空并且k==1,返回1

(3)如果二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树k-1层节点个数之和


代码如下:

int GetNodeNumKthLevel(BinaryTreeNode *pRoot, int k) 

   if(pRoot == NULL || k < 1) 

       return 0; 

   if(k == 1) 

       return 1; 


   int numLeft = GetNodeNumKthLevel(pRoot->m_pLeft, k-1); // 左子树中k-1层的节点个数 

   int numRight = GetNodeNumKthLevel(pRoot->m_pRight, k-1); // 右子树中k-1层的节点个数 

   return (numLeft + numRight); 

}


二叉树叶子节点个数


递归方式

1)如果给定节点pRoot为NULL,则是空树,叶子节点为0,返回0;

2)如果给定节点pRoot左右子树均为NULL,则是叶子节点,且叶子节点数为1,返回1;

3)如果给定节点pRoot左右子树不都为NULL,则不是叶子节点,以pRoot为根节点的子树叶子节点数=pRoot左子树叶子节点数+pRoot右子树叶子节点数

 

代码如下

int  GetLeafNum(BinaryTreeNode *pRoot)

{

    if( pRoot ==NULL )

        return0;

    if(pRoot->m_pLeft == NULL && pRoot->m_pRight == NULL )

        return1;

 

    return (GetLeafNum( pRoot->m_pLeft) + GetLeafNum ( pRoot->m_pRight) );

}


非递归方式:

用非递归便利的方式遍历二叉树,便利的同时,判断当前节点是否为叶子节点,如果是,计数器计数。

二叉树第k层的叶子节点数

不论是“求二叉树第k层的节点数”还是“求二叉树第k层的叶子节点数”,算法思想都是二叉树的层序遍历,在前面几篇博文中已经多次讲述,此处就不再赘述了。求二叉树第k层的叶子节点数,同样有递归方法和非递归方法...

二叉树叶子节点的个数和第k层的节点个数——题集八

二叉树叶子节点的个数和第k层的节点个数——题集八        今天,博主没懒丢,所以来分享一下二叉树叶子节点的个数和第k层的节点个数,求数组中数字次数超过数组一半的字符。        求二叉树...

数据结构面试题/求二叉树叶子节点的个数/求二叉树第k层的节点个数

题目:求二叉树叶子节点的个数/求二叉树第k层的节点个数 二叉树如图所示: #pragma once #include #include #include #include using namesp...

17_7_22 求二叉树叶子节点的个数/求二叉树第k层的节点个数

题目描述: 求二叉树叶子节点的个数/求二叉树第k层的节点个数思路: 这两个题目的思想类似,都是利用二叉树的自相似性,把每次传进来的节点看做是一个二叉树的根结点。将问题细化,将每个节点的状态信息返回...

二叉树中叶子节点的个数第K层的节点个数

叶子节点的个数size_t _GetLeefNode(Node *pRoot) { if (pRoot == NULL) return 0; if (NULL == p...
  • gjggj
  • gjggj
  • 2017年07月29日 22:13
  • 169

二叉树叶子节点个数计算 -- 采用递归和非递归方法实现

/*求二叉树叶子节点个数 -- 采用递归和非递归方法 经调试可运行源码及分析如下: ***/ #include #include #include using std::cout; using s...

求二叉树叶子节点的个数/求二叉树第k层的节点个数(递归思想)

//1.【基础题】--求二叉树叶子节点的个数/求二叉树第k层的节点个数。 #include #include using namespace std; template struct TreeNo...

二叉树第K层叶子节点个数 -- 采用递归和非递归方法实现

/*二叉树第K层叶子节点个数 -- 采用递归和非递归方法 经调试可运行源码及分析如下: ***/ #include #include #include using std::cout; using...

二叉树中叶子节点的个数(递归)

题目:求二叉树中叶子节点的个数。 思路: (1)树中的叶子节点的个数 = 左子树中叶子节点的个数 + 右子树中叶子节点的个数。利用递归代码实现,简单,易懂。 1> 如果给定节点T为NULL,...

二叉树中叶子节点的个数(非递归)

算法思想:在遍历二叉树时,判断当前访问的节点是不是叶子节点,然后对叶子节点求和即可。(前序、中序、后序、按层遍历均可)以”前序”为例,代码中有详细注释,不再具体阐述,实现如下:#include #d...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:六:二叉树中第k层节点个数与二叉树叶子节点个数
举报原因:
原因补充:

(最多只允许输入30个字)