六:二叉树中第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-1层左孩子节点数+第k-1层右孩子节点数目,直到k==1时,说明已经到了第K层。 非递归实现二叉树的第K层节点数目,需要借助队列,与求解二...
  • jcm666666
  • jcm666666
  • 2016年09月16日 11:28
  • 1286

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

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

求二叉树第K层的叶子节点的个数(假设根节点是第一层)

算法思想:采用队列结构按层次遍历,遍历K层时记录叶子的个数   int LeafKlevel(BiTree bt, int k){ //求二叉树bt的第k(k >1)层上叶子的节点个数...
  • Shiliang3
  • Shiliang3
  • 2014年11月24日 17:33
  • 1344

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

class BinaryTreeNode { int val; BinaryTreeNode left = null; BinaryTreeNode right = null; } publi...
  • universe_ant
  • universe_ant
  • 2017年06月10日 16:54
  • 473

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

/*二叉树第k层节点个数 -- 采用递归和非递归方法 经调试可运行源码及分析如下: ***/ #include #include #include using std::cout; using s...
  • y396397735
  • y396397735
  • 2016年04月14日 15:51
  • 1052

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

struct BinaryTree { char value; BinaryTree* left; BinaryTree* right; }; //求二叉树中的节点个数 //(1)如果二叉树为...
  • zheng0518
  • zheng0518
  • 2013年05月08日 16:24
  • 2785

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

题目:求二叉树叶子节点的个数/求二叉树第k层的节点个数 二叉树如图所示: #pragma once #include #include #include #include using namesp...
  • s25691011
  • s25691011
  • 2017年07月23日 12:25
  • 397

设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数

思想:采用基于层序遍历的方法。用level扫描各层节点,若某一层的节点出队后,rear指向该层中最右节点,则将rear赋值给last(对于第一层,last=1).在出队时,若front=last,表示...
  • wuruiaoxue
  • wuruiaoxue
  • 2015年07月06日 01:03
  • 1374

二叉树(8)----求二叉树第K层的节点数和二叉树第K层的叶子节点数,递归方式和非递归方式

1、二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct ...
  • beitiandijun
  • beitiandijun
  • 2014年12月15日 11:12
  • 4638

二叉树3(统计二叉树中叶子节点的个数)

# include # include typedef char ElemType; typedef struct BiTNode{ ElemType data; struct BiTN...
  • ykhappiness
  • ykhappiness
  • 2012年09月28日 19:32
  • 5583
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:六:二叉树中第k层节点个数与二叉树叶子节点个数
举报原因:
原因补充:

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