试编写算法,对一棵以孩子—兄弟链表表示的树统计叶子的个数

zhjh9823 2009-12-22 06:46:23
这个题目怎么做???
还请帮忙写出主函数,多谢
...全文
3870 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhjh9823 2009-12-23
  • 打赏
  • 举报
回复
多谢各位
renzhewh 2009-12-23
  • 打赏
  • 举报
回复
运行4#的代码,输入ab*c**f**,其中*表示空格。
即可得到运行结果3。
zhjh9823 2009-12-23
  • 打赏
  • 举报
回复
继续顶,找一个可以直接运行的程序就好
inx101 2009-12-22
  • 打赏
  • 举报
回复
该死的递归。。。 该死的标记数列。。。
zhjh9823 2009-12-22
  • 打赏
  • 举报
回复
汗- -!我对这些其实不懂,是帮朋友问来着。。。
能搞个能运行的????
sduxiaoxiang 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huiguixian 的回复:]
C/C++ code#include<stdio.h>
#include<stdlib.h>

typedefchar ElemType;
typedefstruct BTNode{
ElemType data;struct BTNode* left;struct BTNode* right;
}BTreeNode;

BTreeNode*CreateBTree(BTreeNode?-
[/Quote]
孩子-兄弟结构

而且不一定是二叉树。。
zhjh9823 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huiguixian 的回复:]
C/C++ code#include<stdio.h>
#include<stdlib.h>

typedefchar ElemType;
typedefstruct BTNode{
ElemType data;struct BTNode* left;struct BTNode* right;
}BTreeNode;

BTreeNode*CreateBTree(BTreeNode?-
[/Quote]


运行无结果????
小小攻城师 2009-12-22
  • 打赏
  • 举报
回复
用中序遍历的意思是其实统计叶子个数节点一摸一样的,只是把输出换成统计
创建树的函数比较简单 以*做空格 创建一个简单树
abc**d**e*fg***(空格表示出来不好看,所以用*,你输入的时候用同个数的空格)
然后这个树是a的左节点b b的左右节点分别c和d c和d是叶子节点 e是a右节点
f是e的右节点 g是f的左节点 g是叶子节点
楼主把这棵树画出来理解一下
小小攻城师 2009-12-22
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
typedef struct BTNode{
ElemType data;
struct BTNode* left;
struct BTNode* right;
}BTreeNode;

BTreeNode *CreateBTree(BTreeNode * HL);
void InOrder(BTreeNode *HL);
int CountTreeLeaf(BTreeNode *HL);

int main()
{
BTreeNode * HL = NULL;
HL = CreateBTree(HL);
InOrder(HL);
printf("%d\n",CountTreeLeaf(HL));
return 0;
}

BTreeNode *CreateBTree(BTreeNode * HL)
{
ElemType ch;
scanf("%c", &ch);
if (ch == ' ')
HL = NULL;
else
{
HL = (BTreeNode *)malloc(sizeof(BTreeNode));
HL->data = ch;
HL->left = CreateBTree(HL->left);
HL->right = CreateBTree(HL->right);
}
return HL;
}

void InOrder(BTreeNode *HL)
{
if (HL != NULL)
{
InOrder(HL->left);
printf("%c ", HL->data);
InOrder(HL->right);
}
}

int CountTreeLeaf(BTreeNode *HL)
{
static int count = 0;
if (HL != NULL)
{
CountTreeLeaf(HL->left);
if (HL->right == NULL && HL->left == NULL)
++count;
CountTreeLeaf(HL->right);
}
return count;
}
zhjh9823 2009-12-22
  • 打赏
  • 举报
回复
额。。。。
不是太明白。。可以帮忙写么
macrojj 2009-12-22
  • 打赏
  • 举报
回复
深度 遍历
sduxiaoxiang 2009-12-22
  • 打赏
  • 举报
回复
递归遍历就是了
如果一个结点的孩子个数为0 叶结点数++
南理工初题,很完整的题哦南京理工大学课程考卷 (学生考用) 课程名称: 数据结构 学分: 3 大纲编号 062204 卷编号: 考方式: 闭卷 满分分值: 100 考时间: 120 分钟 组卷日期: 2006年5月18日 组卷教师(签字) 张宏 审定人(签字) 王梅 学生班级: 计算机学院 04级 学生学号: 学生姓名: 一、 选择题(1.5*20=30分) 1.若以{4,5,6,3,8}作为叶子结点的权值构造哈夫曼,则带权路径长度是 A) 55 B)68 C)59 D)28 2. 无向图G=(V,E),其中:V={ a,b,c,d,e,f} , E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行广度优先遍历,得到的顶点序列正确的是 A) a,b,e,c,d,f B) a,c,f,e,b,d C) a,e,b,c,f,d D) a,e,d,f,c,b 3. 对关键字码集合K={53,30,37,12,45,24,96},从空二叉出发建立与集合K对应的二叉排序,若希望得到的高度最小,应选择下列哪个输入序列 。 A)45,24,53,12,37,96,30 B)12,24,30,37,45,53,96 C)37,24,12,30,53,45,96 D)30,24,12,37,45,96,53 4. 已知一组数{20,8,6,2,30,1}的排序过程为: (1)20,8,6,2,30,1 (2)1,8,6,2,30,20 (3)1,2,6,8,30,20 (4)1,2,6,8,20,30 问它是下面那一种排序: A)快速排序 B) 直接插入排序 C) 起泡排序 D) 选择排序 5.计算机算法必须具备输入、输出和 等五个特征。 A) 可行性、可移植性和可扩充性 B)可行性、确定性和有穷性 C) 确定性、有穷性和稳定性 D)易读性、稳定性和安全性 6.设哈希表长为14,哈希函数是H(key)=key,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为26的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是 A) 8 B) 3 C)2 D)9 7.在一个单链表中,若要删除p所指结点的后继结点,则执行 。 A) p=p->next; p->next=p->next->next B) free(p->next) (C语言格式) 或 delete p->next (C++语言格式) C) p=p->next->next; D) p->next=p->next->next 8. 数组A的每个元素需要4个字节存放,数组有8行 10列,若数组以行为主顺序存放在内存SA开始的存储区中,则A中8行5列的元素的位置是 A) SA+74 B)SA+292 C)SA+296 D)SA+300 9-10.在一棵7阶B中,若在某结点中插入一个新关键字而引起该结点分裂,则此结点中原有 (1) 个关键字;若在某结点中删去一个关键字而导致结点合并,则该结点中原有的关键字的个数是 (2) 。 (1) A)6 B)5 C)4 D)3 (2) A)4 B)3 C)2 D)1 11.已知四个元素a,b,c,d依次进栈,进栈过程中可出栈,下面那一种出栈顺序是不正确的 A)a,d,c,b B)b,c,d,a C)c,a,d,b D)c,d,b,a 12.队列操作的原则是 。 A) 先进先出 B) 后进先出 C) 只能进行插入 D)只能进行删除 13.在有n 个结点的二叉链表中,值为空链域的个数为 A)n-1 B)2n-1 C)n+1 D)2n+1 14.具有1080个结点的完全二叉的深度为 A) 12 B)10 C)11 D)13 15.若已知一个栈的入栈序列是元素1,2,3,....,n,其输出序列为p1,p2,p3,…pn,若p1是n,则pi是( ) A) i B)n-i C)n-i+1 D)不确定 16.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是
1. 算法的基本概念 利用计算机算法为计算机解题的过程实际上是在实施某种算法。 (1)算法的基本特征 算法一般具有4个基本特征:可行性、确定性、有穷性、拥有足够的情报。 (2)算法的基本运算和操作 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 (3)算法的3种基本控制结构 算法的3种基本控制结构是:顺序结构、选择结构、循环结构。 (4)算法基本设计方法 算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。 (5)指令系统 所谓指令系统指的是一个计算机系统能执行的所有指令的集合。 (2)数据结构研究的3个方面 ① 数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; ② 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; ③ 对各种数据结构进行的运算。 2. 逻辑结构 数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成:B=(D,R) 其中,B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一个数据结构,则可表示成:B =(D,R) D ={春季,夏季,秋季,冬季} R ={(春季,夏季),(夏季,秋季),(秋季,冬季)} 3. 存储结构 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。 由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。 顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。 链式存储结构就是在每个结点中至少包含一个指针域,用指针来体现数据元素之间逻辑上的联系。 1.2.2 线性结构和非线性结构 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。 (1)如果一个非空的数据结构满足下列两个条件: ① 有且只有一个根结点; ② 每一个结点最多有一个前件,也最多有一个后件。 则称该数据结构为线性结构。线性结构又称线性表。在一个线性结构中插入或删除任何一个结点后还应是线性结构。栈、队列、串等都为线性结构。 如果一个数据结构不是线性结构,则称之为非线性结构。数组、广义表、和图等数据结构都是非线性结构。 (2)线性表的顺序存储结构具有以下两个基本特点: ① 线性表中所有元素所占的存储空间是连续的; ② 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 元素ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 (3)顺序表的运算有查找、插入、删除3种。 1.3 栈 1. 栈的基本概念 栈(stack)是一种特殊的线性表,是限定只在一端进行插入与删除的线性表。 在栈中,一端是封闭的,既不允许进行插入元素,也不允许删除元素;另一端是开口的,允许插入和删除元素。通常称插入、删除的这一端为栈顶,另一端为栈底。当表中没有元素时称为空栈。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。 栈是按照“先进后出”或“后进先出”的原则组织数据的。例如,枪械的子弹匣就可以用来形象的表示栈结构。子弹匣的一端是完全封闭的,最后被压入弹匣的子弹总是最先被弹出,而最先被压入的子弹最后才能被弹出。 二级公共基础知识速学教程 2. 栈的顺序存储及其运算 栈的基本运算有3种:入栈、退栈与读栈顶元素。 ① 入栈运算:在栈顶位置插入一个新元素; ② 退栈运算:取出栈顶元素并赋给一个指定的变量; ③ 读栈顶元素:将栈顶元素赋给一个指定的变量。 1.4 队列 1. 队列的基本概念 队列是只允许在一端进行删除,在另一端进行插入的顺序表,通常将允许删除的这一端称为队头,允许插入的这一端称为队尾。当表中没有元素时称为空队列。 队列的修改是依照先进先出的原则进行的,因此队列也称为先进先出的线性表,或者后进后出的线性表。例如:火车进遂道,最先进遂道的是火车头,最后是火车尾,而火车出遂道的时候也是火车头先出,最后出的是火车尾。若有队列: Q =(q1,q2,…,qn) 那么,q1为队头元素(排头

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧