您的位置:首页 > 理论基础 > 数据结构算法

数据结构作业-7

2011-03-22 18:57 369 查看
题目:编写递归算法,计算二叉树中叶子结点的数目。

1.需求分析
   
使用递归的方法,实现二叉树中叶子节点数量的计算。
输入:一颗树的前序遍历,用#代替结束符。
例如,前序遍历:AB#C##D##



输出:二叉树的叶子节点个数。
功能:计算输入的二叉树的叶子节点个数。
                                                                                                                                       

2.概要设计

二叉树定义:
                  
数据;
                  
左孩子(或为空,或为二叉树);

                  
右孩子(或为空,或为二叉树);
需要用户把二叉树转化成先序遍历的字符串,用#代替结束符,然后才能使用计算机处理,并且,输出结果仍为字符串。
 

3.详细设计
//二叉树的节点定义
typedef
struct BiTreeNode
{
   
char data;
   
struct BiTreeNode *LChild;//左孩子指针
   
struct BiTreeNode *RChild;//右孩子指针
}BTNode,*BiTree;
 
//按照前序遍历的顺序创建二叉树
BTNode *CreateTree()
{创建根节点;
   
创建左子树;
   
创建右子树}
 
//按照后序遍历计算叶子节点个数
int
leafCount(BiTree
T)
{计算左子树的叶子节点;
   
计算右子树的叶子节点;
   
If(是叶子节点)
      
数量+1;}
 
//主函数调用
int
_tmain(int
argc, _TCHAR* argv[])
{接收用户输入,创建二叉树;
计算二叉树的叶子节点数}
 
流程图:



4.调试分析
   

 
5.使用说明

1)        
运行程序

2)        
输入前序遍历二叉树的序列

3)        
回车,查看结果
 
6.测试结果
        
第一组:一般树
输入:AB#C##D##
输出:
叶子节点:C
叶子节点:D
叶子节点的个数为:2
        

第二组:单枝树
输入:ABC####
输出:
叶子节点:C
叶子节点的个数为:1
        
第三组:空树
        
输入:#
输出:
叶子节点的个数为:0
 
        
第四组:满二叉树
        
输入:ABDH##I##EJ###CF##G##
        
输出:

叶子节点:H
叶子节点:I
叶子节点:J
叶子节点:F
叶子节点:G
叶子节点的个数为:5
        

        
第五组:一般树
        
输入:ABD#G###CE##F##
        
输出:
叶子节点:G
叶子节点:E
叶子节点:F
叶子节点的个数为:3
7.附录
源程序文件清单。
// Bin_Count_叶子节点.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>

//假设节点元素类型为char
int count=0;//用于计算叶子节点个数

//二叉树的节点定义
typedef struct BiTreeNode
{
char data;
struct BiTreeNode *LChild;//左孩子指针
struct BiTreeNode *RChild;//右孩子指针
}BTNode,*BiTree;

//按照前序遍历的顺序创建二叉树
BTNode *CreateTree()
{
BTNode *p;//根节点
char dt;//接收数据
dt=getchar();
if (dt=='#')//节点元素类型为char
{
return NULL;
}
else
{
p=new BTNode();
p->data=dt;
p->LChild=CreateTree();
p->RChild=CreateTree();
return p;
}
}

//按照后序遍历计算叶子节点个数
int leafCount(BiTree T)
{
if (T!=NULL)
{
leafCount(T->LChild);
leafCount(T->RChild);
if (T->LChild==NULL && T->RChild==NULL)
{
printf("/n叶子节点:%c ",T->data);
count++;
}
}
return count;
}

//主函数调用
int _tmain(int argc, _TCHAR* argv[])
{
printf("按前序遍历的顺序,创建二叉树(用#代替结束符):");
BiTreeNode *t=CreateTree();
printf("/n叶子节点的个数为:%d/n",leafCount(t));
system("pause");
return 0;
}
 
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息