`
jaychang
  • 浏览: 716617 次
  • 性别: 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;
}
 
分享到:
评论

相关推荐

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

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

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

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

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

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

    二叉树的所有编程算法

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

    二叉树的各种操作

    实现如下二叉排序树算法: (1) 插入新结点 (2) 前序、中序、后序遍历二叉树 (3) 中序遍历的非递归算法 (4) 层次遍历二叉树 (5) 在二叉树中查找给定关键字(函数返回值为成功1,失败0) ...(8) 叶子结点数

    二叉树排序树建立及平衡处理

    求结点数,非递归中序遍历 DestoryBSTree(BSTree *T) 后序遍历销毁平衡二叉排序树T R_Rotate(BSTree *p) 对以*p为根的平衡二叉排序树作右旋处理,处理之后p指向新的树根结点 即旋转处理之前的左子树的根结点 L_...

    【Leetcode】【Python】二叉树(一) 最大深度和DFS

    二叉树的深度为根节点到最远叶子节点的最长路径上的节 点数。 二叉树的最大深度为左右子树的最大深度+1 首先使用递归方法求解。 class TreeNode: def __init__(self, x): self.val = x self.left = None ...

    C语言课设  二叉树

    二叉树的二叉链表存储结构 先中后遍历 深度 叶子结点数 递归建树

    与二叉树相关的程序集锦

    二叉树结点数、叶子数、深度、三种遍历(递归和非递归形式),层次遍历等等内容的实现!!!

    数据结构 二叉排序树算法

    /*用函数实现如下二叉排序树算法: (1) 插入新结点 (2) 前序、中序、后序遍历二叉树 (3) 中序遍历的非递归算法 (4) 层次遍历二叉树 (5) 在二叉树中查找给定关键字(函数返回值为成功1...(8) 叶子结点数

    南理工初试试题

    5.在一棵二叉树中,度为1的结点有40个,总的结点数为99,则二叉树中叶子结点数共有 (10) 。 6.在一棵m阶B-树中,若在某结点中插入一个新关键字而引起该结点分裂时,则左边结点有 (11) 个关键字;右边结点的关键...

    数据结构(C++)有关练习题

    2、通过二叉树遍历操作了解递归的本质和方法; 内容及步骤: 1、 试建立一个二叉搜索树,并实现以下成员函数: a. 默认构造函数和带数据域、左子树指针、右子树指针的构造函数; b. 按照二叉搜索树...

    计算机二级公共基础知识

    在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。 完全二叉树是指这样的二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只...

    计算机二级C语言考试题预测

    (13) 设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为(B) 注:利用公式n=n0+n1+n2、n0=n2+1和完全二叉数的特点可求出 A. 349 B. 350 C. 255 D. 351 (14) 结构化程序设计主要强调的是(B) A.程序的规模 ...

Global site tag (gtag.js) - Google Analytics