如何求一棵二叉树深度和叶子数(递归)C++版
2012-04-29 01:04
232 查看
(1)求一棵二叉树的深度用递归比较简单,求一棵二叉树的深度可以递归定义为:
若为空树,则深度为0;
否则,比较它的左子树的深度和它的右子树的深度,如果左子树的深度大于右子树,则树的深度=左子树+1,反之,则树的深度=右子树+1;
源程序如下:
template<class T>
int BiTree<T>::countHighOfBiTree(BiTreeNode<T> *currentNode)
{
if(!currentNode) return 0;
if(countHighOfBiTree(currentNode->getLChild() ) >=countHighOfBiTree(currentNode->getRChild() ))
return countHighOfBiTree(currentNode->getLChild() )+1;
else
return countHighOfBiTree(currentNode->getRChild() )+1;
}
(2)求一棵二叉树的叶子数用递归求比较简单,求一棵二叉树的叶子数的递归定义为:
若为空树,叶子数为0;
若只有根结点,则叶子数为1;
否则,叶子数为根结点的左子树叶子数+右子树叶子数。
源程序为:
template<class T>
int BiTree<T>::countNumOfLeaf(BiTreeNode<T> *currentNode)
{
if(!currentNode) return 0; //空树
if(!currentNode->getLChild() && !currentNode->getRChild() )
//当前结点为叶子结点
return 1;
else //左子树叶子数+右子树叶子数
return countNumOfLeaf(currentNode->getLChild())+countNumOfLeaf(currentNode->getRChild() );
}
若为空树,则深度为0;
否则,比较它的左子树的深度和它的右子树的深度,如果左子树的深度大于右子树,则树的深度=左子树+1,反之,则树的深度=右子树+1;
源程序如下:
template<class T>
int BiTree<T>::countHighOfBiTree(BiTreeNode<T> *currentNode)
{
if(!currentNode) return 0;
if(countHighOfBiTree(currentNode->getLChild() ) >=countHighOfBiTree(currentNode->getRChild() ))
return countHighOfBiTree(currentNode->getLChild() )+1;
else
return countHighOfBiTree(currentNode->getRChild() )+1;
}
(2)求一棵二叉树的叶子数用递归求比较简单,求一棵二叉树的叶子数的递归定义为:
若为空树,叶子数为0;
若只有根结点,则叶子数为1;
否则,叶子数为根结点的左子树叶子数+右子树叶子数。
源程序为:
template<class T>
int BiTree<T>::countNumOfLeaf(BiTreeNode<T> *currentNode)
{
if(!currentNode) return 0; //空树
if(!currentNode->getLChild() && !currentNode->getRChild() )
//当前结点为叶子结点
return 1;
else //左子树叶子数+右子树叶子数
return countNumOfLeaf(currentNode->getLChild())+countNumOfLeaf(currentNode->getRChild() );
}
相关文章推荐
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 分别采用递归和非递归方式编写两个函数,求一棵二叉树中叶子节点个数
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 数据结构与算法 -- 二叉树链式详解((非)/递归遍历,叶子个数,深度计算)
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 二叉树递归的基本操作(求叶子数目、深度、路径汇总)
- 如何求一棵二叉树的深度
- 二叉树系列(建树,前序,中序,后序,中序非递归,深度,叶子数,节点数)
- 2013-03-17---二叉树递归,非递归实现(附代码)深度,叶子节点数量,逐行打印二叉树
- 二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数
- 二叉树叶子节点遍历---递归与非递归方法求取树深度
- 二叉树的基本操作(创建、递归和非递归遍历、求深度、求叶子数)
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 二叉树先序后序递归建立,前中后序层次非递归遍历,以及统计叶子结点个数以及树的深度