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

zhjh9823 2009-12-22 06:46:23
这个题目怎么做???
还请帮忙写出主函数,多谢
...全文
3863 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 叶结点数++

70,020

社区成员

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

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