`
jaychang
  • 浏览: 735180 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

递归求二叉树的叶子结点数及深度

 
阅读更多
#include<iostream>
using namespace std;

typedef struct BiTreeNode{
char data;
BiTreeNode *lChild;
BiTreeNode *rChild;
}BiTreeNode;

int leafCount;


//递归建立二叉树
void InitialBiTree(BiTreeNode *&node)
{
char data;
cout<<"请输入数据,输入#结束"<<endl;
cin>>data;
if(data!='#')
{
     node=(BiTreeNode*)malloc(sizeof(BiTreeNode));
   if(node==NULL)return;
   node->data=data;
   InitialBiTree(node->lChild);
   InitialBiTree(node->rChild);
}
else
{
   node=NULL;
}
}


//先序遍历
void TransFirstBiTree(BiTreeNode *&root)//注意使用*&root,^-^搞得有点郁闷反正就是这样root才可以保住
{
if(root==NULL)return;
else
{
   cout<<root->data<<" ";
   TransFirstBiTree(root->lChild);
   TransFirstBiTree(root->rChild);
}
}

//叶结点基数
void CountLeafNode(BiTreeNode *&root)
{
if(root!=NULL)
{
   if(root->lChild==NULL&&root->rChild==NULL)
    leafCount++;
   CountLeafNode(root->lChild);
   CountLeafNode(root->rChild);
}
else
{
   return ;
}
}

//递归求二叉树的深度,max=hl>hr?hl:hr;max+=1;(递归定义)
int PostTreeDepth(BiTreeNode *&root)
{
int hl,hr,max;
if(root!=NULL)
{
   hl=PostTreeDepth(root->lChild);
   hr=PostTreeDepth(root->rChild);
   max=hl>hr?hl:hr;
   return (max+1);
}
else
   return 0;
}

int main()
{  
char cmd;
do{
   leafCount=0;
   BiTreeNode *root=NULL;
   InitialBiTree(root);
   cout<<"先序遍历\n";
   TransFirstBiTree(root);
   cout<<"\n";
   cout<<"\n";CountLeafNode(root);
   cout<<"叶结点数目为\n";
   cout<<leafCount<<endl;
   cout<<"树的深度为\n";
   cout<<PostTreeDepth(root)<<endl;
   cout<<"继续吗?y or n\n";
   cin>>cmd;
}while(cmd=='y');
return 0;
}
 
分享到:
评论

相关推荐

    二叉树的叶子结点数及深度

    ### 二叉树的叶子结点数及深度 在计算机科学领域,二叉树是一种重要的数据结构,广泛应用于算法设计、数据库索引等场景。本文将详细介绍如何在C++中编写程序来计算二叉树的叶子结点数及深度。 #### 一、二叉树的...

    叶子结点数及深度(C语言)

    在“叶子结点数及深度.cpp”文件中,你应该能看到这些功能是如何实现并测试的。这为初学者提供了很好的实践机会,帮助他们理解和掌握二叉树的概念以及C语言的递归编程。 总的来说,这个C语言练习涵盖了二叉树的基本...

    二叉树的遍历与求深度以及结点数

    在上述的`TreeDepth()`函数中,已经通过递归调用间接地统计了二叉树的结点数。每次访问到一个节点时,都会将全局变量`NodeNum`增加1。因此,当整个树被遍历完毕后,`NodeNum`的值即为二叉树的结点总数。 #### 五、...

    数据结构C#二叉树的基本运算

    二叉树的基本运算还包括计算结点数,这可以通过递归或非递归方式实现,通过遍历树的每一个节点并累加计数。复制二叉树则需要创建一个新的二叉树,其结构和原树完全相同,这通常通过深度优先搜索或广度优先搜索来完成...

    C语言递归实现二叉树的建立.pdf

    * 本文还实现了计算二叉树的结点数、深度和叶子结点数的方法。 * 结点数计算:在numofnode()函数中,使用递归方法来计算二叉树的结点数。如果当前节点为空,则返回0,否则,返回左子树和右子树的结点数之和加1。 *...

    用Python实现二叉树、二叉树非递归遍历及绘制的例子

    本文主要通过python以非递归形式实现二叉树构造、前序遍历,中序遍历,后序遍历,层次遍历以及求二叉树的深度及叶子结点数。其他非递归形式的遍历,想必大多人应该都很清楚,就不再声明。如果你用C或者C++或者其他...

    树子系统实现二叉树的创建,先序遍历,中序遍历,后序遍历,求叶子数,求结点数,求树的深度

    在这个树子系统中,我们关注的是如何创建二叉树以及对它的各种操作,如先序遍历、中序遍历、后序遍历,以及计算叶子节点数、节点总数和树的深度。 **二叉树的创建**: 创建二叉树通常涉及到动态内存分配和节点的...

    实验四-二叉树操作实现.pdf

    本实验主要实现了二叉树的各种操作,包括求二叉树深度、叶子结点数、1度结点数、2度结点数、交换二叉树左右子树、找二叉树中序遍历最后一个结点等。 二叉树深度 在计算机科学中,二叉树深度是指从根节点到最深叶子...

    数据结构课程设计报告-二叉树的遍历.docx

    本报告基于二叉树的遍历方法,旨在通过递归和非递归两种方法创建一棵二叉树,并对其进行先序遍历、中序遍历、后序遍历及层次遍历,并求出该二叉树的深度和叶子结点数。同时,报告还实现了查找功能,能够输入一个结点...

    数据结构实验报告——二叉树

    ### 数据结构实验报告——...- **计数操作**:函数`TreeDepth()`不仅计算了二叉树的深度,还统计了节点总数和叶子节点的数量。 通过以上实验步骤和程序实现,学生可以全面掌握二叉树的相关理论知识和实际应用能力。

    C/C++:二叉树的非递归遍历及其他操作(含完整注释)

    定义二叉树的存储结构,采用非递归算法实现二叉树的二叉树的先序、中序、后序和按层遍历。并实现求二叉树的深度、求总结点数、求叶子结点、查找某个结点等操作(可以采用递归)。

    数据结构(C语言版) 第五章 树与二叉树 知识梳理 + 作业习题详解1

    3. 完全二叉树的叶子节点数n0与2度节点数n2的关系是n0 = n2 + 1。 完全二叉树是所有层都尽可能填满的二叉树,除了最后一层。若二叉树有5000个节点,那么根据性质3,其叶子节点的个数为2500。 二叉树的存储方式有两...

    二叉树的各种算法.doc

    本文档中,我们将讨论二叉树的各种算法,包括插入结点、前序、中序、后序遍历、层次遍历、查找关键字、交换左右子树、求二叉树深度和叶子结点数等。 1. 插入新结点 插入新结点是二叉树算法的基本操作。我们可以...

    平衡二叉树C实现源码(带详细注释)

    //实现二叉树叶子结点数的求值 Status DeleteBST(BSTree &T,ElemType e); //实现树的节点的删除 int TreeHeight(BSTree T); //实现树的高度的求值 int Max(int a,int b); //实现两个数中求最大值 Position ...

    实验五 二叉树的基本操作实现

    在本实验中,我们需要统计二叉树中的结点数。我们可以使用递归方法或非递归方法实现。下面是使用递归方法实现的示例代码: ```c int countNodes(Node *root) { if (root == NULL) { return 0; } return 1 + ...

    数据结构课程设计(二叉树的基本操作).pdf

    先分别求得左右子树中各叶子结点个数,再计算出两者之和即为二叉树的叶子结点数。 四、调试结果 通过调试,程序可以正确地构建二叉树、进行前序遍历、中序遍历、后序遍历、计算二叉树的深度和叶子结点个数。 五、...

    实验3-树和二叉树.docx

    2. 编写一个求二叉树叶子结点数的算法。 实验主要设备及软件: 1. PC 机 2. Turbo C 2.0 或 Visual C++ 实验流程: (一)头文件(header.h) 在 header.h 文件中,我们定义了二叉树的结构体 BiTree,包括节点的...

    二叉树的实验报告

    - **叶子结点数**:递归方法时,根节点无左子树且无右子树即为叶子结点,加上左右子树的叶子结点数。 - **深度**:从根节点到最远叶子结点的最长路径长度。 - **宽度**:在一棵树的最大层的节点数量。 4. **节点...

    统计二叉树的结点个数的参考程序

    - **递归方法**:对于任意非空二叉树T,如果当前节点的左子树和右子树都为空,则该节点是叶子节点。递归地计算左子树和右子树中的叶子节点数量。 - **代码实现**: ```cpp void BiLeafCount(BiTree T, int &count) {...

    二叉树的所有编程算法

    二叉树的建立,遍历算法(递归与非递归,基于对列或堆栈)统计二叉树中叶子结点的个数,统计二叉树中结点的总数,求二叉树的深度(后序遍历),求二叉树的宽度(具有结点数最多的层上的结点数,已知二叉树中序遍历和...

Global site tag (gtag.js) - Google Analytics