数据结构作业-7
2011-03-22 18:57
369 查看
题目:编写递归算法,计算二叉树中叶子结点的数目。
1.需求分析
使用递归的方法,实现二叉树中叶子节点数量的计算。
输入:一颗树的前序遍历,用#代替结束符。
例如,前序遍历:AB#C##D##
![](http://hi.csdn.net/attachment/201103/22/0_1300791382q5IK.gif)
输出:二叉树的叶子节点个数。
功能:计算输入的二叉树的叶子节点个数。
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[])
{接收用户输入,创建二叉树;
计算二叉树的叶子节点数}
流程图:
![](http://hi.csdn.net/attachment/201103/22/0_1300791411un0N.gif)
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.附录
源程序文件清单。
1.需求分析
使用递归的方法,实现二叉树中叶子节点数量的计算。
输入:一颗树的前序遍历,用#代替结束符。
例如,前序遍历:AB#C##D##
![](http://hi.csdn.net/attachment/201103/22/0_1300791382q5IK.gif)
输出:二叉树的叶子节点个数。
功能:计算输入的二叉树的叶子节点个数。
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[])
{接收用户输入,创建二叉树;
计算二叉树的叶子节点数}
流程图:
![](http://hi.csdn.net/attachment/201103/22/0_1300791411un0N.gif)
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; }
相关文章推荐
- 第一次作业-数据结构
- 数据结构作业二(2)
- 5-14 数据结构啊poi A.暑假作业
- 数据结构作业-5
- 数据结构作业——Sanji(优先队列)
- 数据结构作业保存3-5返回指定区间内的最大值
- Coder Buct 1072: 数据结构作业(可选)-- 约瑟环问题
- 数据结构作业 ------ 用链表实现简单多项式加法
- 数据结构作业串通配符匹配问题
- 【数据结构作业一】写出顺序表的结构体类型定义及查找、插入、删除算法,并以顺序表作存储结构,实现线性表的插入、删除
- C++表达式求值(Stack and Expression)加州大学伯克利分校计算机专业数据结构与算法作业
- 数据结构作业——N个数中未出现的最小整数(想法题)
- 数据结构作业——Fresh Meat(优先队列)
- 数据结构作业——brothers(二叉树)
- 【数据结构课程大作业】通信录管理系统
- 数据结构(陈越) 作业题 第一周
- 【数据结构作业】实现任意三种静态或动态查找
- 数据结构作业二(1)
- 数据结构作业——N个数中未出现的最小整数(想法题)
- 数据结构作业(第二题)